1. ホーム
  2. powershell

[解決済み] ローカルで作成したスクリプトが、RemoteSigned実行ポリシーで実行できないのはなぜですか?

2022-05-01 14:49:22

質問

<ブロッククオート

この質問には、以下のような回答が続いています。 質問本文に反論したり、実際の問題に対処していない。 以下の簡単な要約をお読みください。 を知る必要があります。

  • これは ではない は、PowerShell のデフォルト・インストールでスクリプトが実行されないのはなぜか、という質問です。
  • これは ではない PowerShellのインストールで、インターネットからダウンロードしたスクリプトを実行できないのはなぜですか?
  • 問題は、なぜ RemoteSigned 実行ポリシーがスクリプトの実行を阻止するはずなのに、阻止されない。
  • RemoteSigned のみ を実行したい。 より制限の少ない他のポリシーが利用可能であることは承知しています。 もし それらのポリシーが許容できる代用品であれば、私はそれを使っていたでしょう。 そうすれば、この質問はなかったでしょう。
  • 実行ポリシーは すでに に設定されています。 RemoteSigned . から変更する RemoteSigned から RemoteSigned は解決策にならない。
  • スクリプトファイルはローカルに作成・保存されます。
  • スクリプトファイルはブロックされていません。 スクリプトファイルがブロックされたことはありません(前項参照)。
  • スクリプトファイルのブロックを解除できない なぜなら、ブロック解除するものがないからです(前項参照)。
  • スクリプトファイルが管理者により実行された(されようとした)。
  • Windows PowerShell は、関係するアプリケーションのみです。 ない Windows PowerShell ISE また Command Prompt や他のツール、あるいは エディタが関連します。
  • 問題の原因には すでに 特定された (受理済み回答参照)。 8年近く経った今、他のすべての明白な 説明も、該当するしないにかかわらず、投稿されています。 もし そうでない場合は 質問と既存の 回答 全体的に を追加する前に、自分のを追加してください。

私は64ビットのWindows 7 ProfessionalでWindows PowerShell 2.0を使用しています。私は、自分の Desktop を実行しようとすると、以下のようなエラーが発生します。

File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system.  Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

私はドメイン管理者とローカル管理者の両方ですが、もし私が Get-ExecutionPolicy -List を見ると Group Policy Object PowerShell を構成するために作成したものは、正しく RemoteSigned 実行ポリシーをマシンレベルで

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy    RemoteSigned
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

で自分でスクリプトを作成しました。 Notepad を使用し、さらに シスインターナル ' streams ユーティリティと、ファイル Properties のダイアログで、スクリプトがインターネットから来たものとして扱われていないことを確認してください。ドメインサーバーのネットワーク共有にスクリプトをコピーすると、実行が許可される。もし私が Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine での実行ポリシーは、ローカルスクリプトの実行を許可していないので、これは理にかなっています。 MachinePolicy スコープが優先されます。

によって文書化されているように about_Execution_Policies ( 現在 ; 質問時 を含む)、その RemoteSigned のポリシーを意味します。

  • スクリプトの実行が可能です。

  • インターネットからダウンロードされるスクリプトや設定ファイルには、信頼できる発行元からのデジタル署名が必要です。 (電子メールやインスタントメッセージングプログラムを含む)。

  • 実行したスクリプトやローカルコンピューターで書いたスクリプト(ダウンロードしたものではない)にはデジタル署名は必要ありません。 インターネット)。

  • インターネット以外から署名されていないスクリプトや、署名されているが悪意のあるスクリプトを実行するリスク。

私のスクリプトは署名されていませんが、ローカルで作成され実行されているので、上記の3番目の箇条書きを満たしているはずです。 したがって...

  • スクリプトの実行が許可されないのはなぜですか?
  • PowerShell は、私のスクリプトがデジタル署名されていないと文句を言うのですが、その要件はインターネットからのファイルにのみ適用されるはずです。
  • ネットワーク共有からスクリプトを実行する場合、PowerShellが署名されていないことを気にしなくなったのはなぜですか?

どのように解決するのですか?

最終的に突き止めたのは .NETコードアクセスのセキュリティ . 私は社内で開発したいくつかのバイナリモジュールをネットワーク共有に保存し、そこから実行するようにしています。 .NET 2.0/PowerShell 2.0にそれらを読み込ませるために、私はURLルールを Intranet コードグループから、そのディレクトリを信頼するようにしました。

PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -listgroups
Microsoft (R) .NET Framework CasPol 2.0.50727.5420
Copyright (c) Microsoft Corporation.  All rights reserved.

Security is ON
Execution checking is ON
Policy change prompt is ON

Level = Machine

Code Groups:

1.  All code: Nothing
    1.1.  Zone - MyComputer: FullTrust
        1.1.1.  StrongName - ...: FullTrust
        1.1.2.  StrongName - ...: FullTrust
    1.2.  Zone - Intranet: LocalIntranet
        1.2.1.  All code: Same site Web
        1.2.2.  All code: Same directory FileIO - 'Read, PathDiscovery'
        1.2.3.  Url - file://Server/Share/Directory/WindowsPowerShell/Modules/*: FullTrust
    1.3.  Zone - Internet: Internet
        1.3.1.  All code: Same site Web
    1.4.  Zone - Untrusted: Nothing
    1.5.  Zone - Trusted: Internet
        1.5.1.  All code: Same site Web

なお、インストールされている.NETのバージョンや、32ビットWindowsか64ビットWindowsかにもよりますが。 caspol.exe は以下の場所に存在することができ、それぞれ独自のセキュリティ設定がされています ( security.config ):

  • $Env:SystemRoot\Microsoft.NET\Framework\v2.0.50727\
  • $Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\
  • $Env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\
  • $Env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\

グループ削除後 1.2.3. ...

PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -remgroup 1.2.3.
Microsoft (R) .NET Framework CasPol 2.0.50727.9136
Copyright (c) Microsoft Corporation.  All rights reserved.

The operation you are performing will alter security policy.
Are you sure you want to perform this operation? (yes/no)
yes
Removed code group from the Machine level.
Success

...CASのデフォルトの設定のままで、ローカルスクリプトが再び動作するようになりました。 しばらくCASをいじっていなかったので、なぜ私のルールがそれらの付与を妨害するように見えるのかよくわかりません FullTrustMyComputer しかし CASは.NET 4.0から非推奨になりました。 (PowerShell 3.0のベースになっている)ので、もう無意味なんでしょうけど。