サーチ…
備考
スクリプトに署名すると、スクリプトはPowerShellのすべてのエクスクルージョンポリシーに準拠し、スクリプトの完全性が保証されます。署名されたスクリプトは、署名された後に変更された場合、実行に失敗します。
スクリプトの署名には、コード署名証明書が必要です。推奨事項:
- 個人的なスクリプト/テスト(共有されません):信頼さcertifiate機関(内部またはサードパーティ)からの証明書または自己署名証明書。
- 組織内で共有:信頼できる証明機関の証明書(社内または第三者)
- 外部組織との共有:信頼できる第三者認証機関の証明書
実行ポリシー
PowerShellには、スクリプトまたは構成を実行するために必要な条件を制御する設定可能な実行ポリシーがあります。複数のスコープに対して実行ポリシーを設定できます。コンピュータ、現在のユーザーおよび現在のプロセス。 実行ポリシーは簡単にバイパスすることができ、ユーザーを制限するのではなく、誤って署名ポリシーに違反しないように保護します。
使用可能なポリシーは次のとおりです。
設定 | 説明 |
---|---|
制限付き | スクリプトは許可されません |
AllSigned | すべてのスクリプトに署名する必要があります |
RemoteSigned | すべてのローカルスクリプトが許可されます。署名されたリモートスクリプトのみ |
無制限 | 要件はありません。すべてのスクリプトは許可されていますが、インターネットからダウンロードしたスクリプトを実行する前に警告します |
バイパス | すべてのスクリプトが許可され、警告は表示されません |
未定義 | 現在のスコープの現在の実行ポリシーを削除します。親ポリシーを使用します。すべてのポリシーが未定義の場合、制限が使用されます。 |
powershell.exe
プロセスを起動するときに、 Set-ExecutionPolicy
cmdlet、Group Policyまたは-ExecutionPolicy
パラメーターを使用して、現在の実行ポリシーを変更できます。
スクリプトに署名する
スクリプトに署名するには、 Set-AuthenticodeSignature
-cmdletとコード署名証明書を使用します。
#Get the first available personal code-signing certificate for the logged on user
$cert = @(Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)[0]
#Sign script using certificate
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1
また、 .pfx
ファイルから証明書を読み取ることもできます。
$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"
スクリプトは、証明書が失効するまで有効です。署名中にタイムスタンプサーバーを使用すると、証明書の有効期限が切れた後でもスクリプトは有効なままです。また、証明書の信頼チェーン(ルート権限を含む)を追加すると、ほとんどのコンピュータがスクリプトの署名に使用した証明書を信頼するのに役立ちます。
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Verisign、Comodo、Thawteなどの信頼できる証明書プロバイダのタイムスタンプサーバーを使用することをお勧めします。
Set-ExecutionPolicyを使用した実行ポリシーの変更
デフォルトスコープ(LocalMachine)の実行ポリシーを変更するには、次のようにします。
Set-ExecutionPolicy AllSigned
特定のスコープのポリシーを変更するには、次のコマンドを使用します。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned
-Force
スイッチを追加すると、プロンプトを非表示にすることができます。
単一スクリプトの実行ポリシーをバイパスする
多くの場合、現在の実行ポリシーに準拠していない署名のないスクリプトを実行する必要があります。これを行う簡単な方法は、その単一プロセスの実行ポリシーをバイパスすることです。例:
powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1
または、省略形を使用することもできます:
powershell -ep Bypass C:\MyUnsignedScript.ps1
その他の実行ポリシー:
ポリシー | 説明 |
---|---|
AllSigned | 信頼できる発行元が署名したスクリプトのみ実行できます。 |
Bypass | 制限なし。すべてのWindows PowerShellスクリプトを実行できます。 |
Default | 通常はRemoteSigned 、ActiveDirectory経由で制御されます |
RemoteSigned | ダウンロードしたスクリプトは、実行する前に信頼できる発行元が署名する必要があります。 |
Restricted | スクリプトは実行できません。 Windows PowerShellは、対話モードでのみ使用できます。 |
Undefined | NA |
Unrestricted * | bypass と同様 |
Unrestricted*
注意:インターネットからダウンロードした署名のないスクリプトを実行すると、実行前にアクセス許可を求めるプロンプトが表示されます。
現在の実行ポリシーを取得する
現在のセッションの有効な実行ポリシーを取得する:
PS> Get-ExecutionPolicy
RemoteSigned
現在のセッションのすべての有効な実行ポリシーを一覧表示します。
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
特定のスコープの実行ポリシーを一覧表示します。プロセス:
PS> Get-ExecutionPolicy -Scope Process
Undefined
署名されたスクリプトから署名を取得する
Get Get-AuthenticodeSignature
-cmdletを使用して、署名付きスクリプトからAuthenticode署名に関する情報を取得します。
Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *
テスト用に自己署名入りのコード署名証明書を作成する
個人的なスクリプトに署名するとき、またはコード署名をテストするときには、自己署名コード署名証明書を作成すると便利です。
PowerShell 5.0から、 New-SelfSignedCertificate
-cmdletを使用して自己署名コード署名証明書を生成することができます。
New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert
以前のバージョンでは、.NET Framework SDKおよびWindows SDKにあるmakecert.exe
ツールを使用して自己署名証明書を作成できます。
自己署名証明書は、証明書をインストールしたコンピュータによってのみ信頼されます。共有されるスクリプトの場合、信頼できる認証局(内部または信頼できる第三者)からの証明書が推奨されます。