サーチ…


備考

スクリプトに署名すると、スクリプトはPowerShellのすべてのエクスクルージョンポリシーに準拠し、スクリプトの完全性が保証されます。署名されたスクリプトは、署名された後に変更された場合、実行に失敗します。

スクリプトの署名には、コード署名証明書が必要です。推奨事項:

  • 個人的なスクリプト/テスト(共有されません):信頼さcertifiate機関(内部またはサードパーティ)からの証明書または自己署名証明書。
  • 組織内で共有:信頼できる証明機関の証明書(社内または第三者)
  • 外部組織との共有:信頼できる第三者認証機関の証明書

about_Signing @ TechNetの詳細を読む

実行ポリシー

PowerShellには、スクリプトまたは構成を実行するために必要な条件を制御する設定可能な実行ポリシーがあります。複数のスコープに対して実行ポリシーを設定できます。コンピュータ、現在のユーザーおよび現在のプロセス。 実行ポリシーは簡単にバイパスすることができ、ユーザーを制限するのではなく、誤って署名ポリシーに違反しないように保護します。

使用可能なポリシーは次のとおりです。

設定説明
制限付きスクリプトは許可されません
AllSigned すべてのスクリプトに署名する必要があります
RemoteSigned すべてのローカルスクリプトが許可されます。署名されたリモートスクリプトのみ
無制限要件はありません。すべてのスクリプトは許可されていますが、インターネットからダウンロードしたスクリプトを実行する前に警告します
バイパスすべてのスクリプトが許可され、警告は表示されません
未定義現在のスコープの現在の実行ポリシーを削除します。親ポリシーを使用します。すべてのポリシーが未定義の場合、制限が使用されます。

powershell.exeプロセスを起動するときに、 Set-ExecutionPolicy cmdlet、Group Policyまたは-ExecutionPolicyパラメーターを使用して、現在の実行ポリシーを変更できます。

about_Execution_Policies @ TechNet詳細を読む

スクリプトに署名する

スクリプトに署名するには、 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 *

テスト用に自己署名入りのコード署名証明書を作成する

個人的なスクリプトに署名するとき、またはコード署名をテストするときには、自己署名コード署名証明書を作成すると便利です。

5.0

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ツールを使用して自己署名証明書を作成できます。

自己署名証明書は、証明書をインストールしたコンピュータによってのみ信頼されます。共有されるスクリプトの場合、信頼できる認証局(内部または信頼できる第三者)からの証明書が推奨されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow