64ビットでWindows PowerShell 2.0を使用しています Windows 7 Professional 。デスクトップにスクリプトを実行すると、次のエラーが発生します。
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
を実行すると、PowerShell
を構成するために作成したGroup Policy Object
がマシンレベルでRemoteSigned
実行ポリシーを正しく適用していることがわかります。
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
自分で Notepad でスクリプトを作成し、 Sysinternals ' streams ユーティリティとファイルProperties
ダイアログを使用して、スクリプトがインターネットから来たものとして扱われていません。ドメインサーバー上のネットワーク共有にスクリプトをコピーすると、実行が許可されます。 Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
を実行すると、ローカルスクリプトの実行はまだ許可されません。これは、MachinePolicy
スコープの実行ポリシーが優先されるため、意味があります。
about_Execution_Policies
で文書化されているように、RemoteSigned
ポリシーの意味は次のとおりです。
スクリプトを実行できます。
インターネットからダウンロードされたスクリプトおよび構成ファイル(電子メールおよびインスタントメッセージングプログラムを含む)に対して、信頼できる発行元からのデジタル署名が必要です。
実行したスクリプトやローカルコンピューター(インターネットからダウンロードしたものではない)に記述したスクリプトにデジタル署名を必要としません。
インターネット以外のソースから署名されていないスクリプト、および署名されているが悪意のあるスクリプトを実行するリスク。
私のスクリプトは署名されていませんが、ローカルで作成および実行されるため、上記の3番目の箇条書きを満たす必要があります。では、なぜ実行が許可されていないのですか? PowerShellが、その要件がインターネットからのファイルにのみ適用されるべきなのに、私のスクリプトが「デジタル署名されていない」と文句を言うのはなぜですか?そして、なぜネットワーク共有から実行されたときにスクリプトが署名されないことを気にしないのですか?
最終的にこれを 。NETコードアクセスセキュリティ に追跡しました。ネットワーク共有に保存され、ネットワーク共有から実行される、内部的に開発されたバイナリモジュールがいくつかあります。 .NET 2.0/PowerShell 2.0をロードしてそれらをロードするために、そのディレクトリを信頼するIntranet
コードグループにURLルールを追加しました。
PS C:\Users\UserName> & "$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ビットまたは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
(CASのデフォルト構成のままにしておきます)を削除した後、ローカルスクリプトが再び機能するようになりました。 CASをいじくり始めてからしばらく経ちますが、FullTrust
からMyComputer
を付与するルールに私のルールが干渉するように見える理由はわかりませんが、 CASは非推奨です.NET 4. (PowerShell 3.0のベース)であるため、今は議論の余地があると思います。
ファイルはブロックされていますか?私は同じ問題を抱えていたので、.PS1ファイルを右クリックして[プロパティ]を選択し、[ブロックを解除]を選択することで解決できました。
確認すること:
無制限に変更できますか?
Set-ExecutionPolicy Unrestricted
グループポリシーは設定されていますか?
Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell
User Configuration\Administrative Templates\Windows Components\Windows PowerShell
また、Script.ps1をどのように呼び出していますか?
これで実行できますか?
powershell.exe -executionpolicy bypass -file .\Script.ps1
ファイルがネットワーク上の場所、つまり別のコンピューターからコピーされた場合、Windowsはそのファイルをブロックしている可能性があります。ファイルを右クリックし、ブロック解除ボタンをクリックして、機能するかどうかを確認します。
これはIDE問題です。 PowerShell GUIで設定を変更します。 ツールタブに移動し、オプションを選択してからデバッグオプションを選択します。次に、ボックススクリプトの署名の要件をオフにするをオンにします。できた.
Powershell GUIを管理者として実行してみてください
DropboxにマップされたドライブのPS1ファイルを実行すると、このエラーが常に発生することがわかりました。 PS1のプロパティを開くとき、「ブロック解除」はありません。
私のために働く唯一のものは
powershell.exe -executionpolicy bypass -file。\ Script.ps1