Set-AuthenticodeSignature
PowerShell スクリプトまたはその他のファイルに Authenticode 署名を追加します。
構文
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-FilePath] <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-LiteralPath <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-SourcePathOrExtension <String[]>
-Content <Byte[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
説明
Set-AuthenticodeSignature
コマンドレットは、サブジェクト インターフェイス パッケージ (SIP) をサポートするすべてのファイルに Authenticode 署名を追加します。
PowerShell スクリプト ファイルでは、署名は、スクリプトで実行される命令の末尾を示すテキスト ブロックの形式になります。 このコマンドレットの実行時にファイルに署名がある場合、その署名は削除されます。
例
例 1 - ローカル証明書ストアの証明書を使用してスクリプトに署名する
これらのコマンドは、PowerShell 証明書プロバイダーからコード署名証明書を取得し、それを使用して PowerShell スクリプトに署名します。
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
FilePath = 'PsTestInternet2.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
最初のコマンドでは、Get-ChildItem
コマンドレットと PowerShell 証明書プロバイダーを使用して、証明書ストアの Cert:\CurrentUser\My
サブディレクトリに証明書を取得します。
Cert:
ドライブは、証明書プロバイダーによって公開されるドライブです。
CodeSigningCert パラメーターは、証明書プロバイダーによってのみサポートされており、取得される証明書をコード署名機関を持つ証明書に制限します。 このコマンドは、結果を $cert
変数に格納します。
2 番目のコマンドでは、$signingParameters
スクリプトに署名する コマンドレットのパラメーターを使用して、Set-AuthenticodeSignature
変数を PSTestInternet2.ps1
として定義します。
FilePath パラメーターを使用してスクリプトの名前を指定し、証明書を 変数に格納することを指定する $cert
パラメーター、およびハッシュ アルゴリズムを SHA256 に設定する HashAlgorithm パラメーターを使用します。
3 番目のコマンドは、$signingParameters
で定義されているパラメーターをスプラッティングしてスクリプトに署名します。
手記
で Get-ChildItem
パラメーターを使用すると、コード署名機関を持ち、秘密キーを含む証明書のみが返されます。 秘密キーがない場合は、署名に証明書を使用できません。
例 2 - PFX ファイルの証明書を使用してスクリプトに署名する
これらのコマンドでは、Get-PfxCertificate
コマンドレットを使用してコード署名証明書を読み込みます。 次に、それを使用して PowerShell スクリプトに署名します。
$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
FilePath = 'ServerProps.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
最初のコマンドでは、Get-PfxCertificate
コマンドレットを使用して、C:\Test\MySign.pfx 証明書を $cert
変数に読み込みます。
2 番目のコマンドでは、$signingParameters
スクリプトに署名する コマンドレットのパラメーターを使用して、Set-AuthenticodeSignature
変数を ServerProps.ps1
として定義します。
FilePath パラメーターを使用してスクリプトの名前を指定し、証明書を 変数に格納することを指定する $cert
パラメーター、およびハッシュ アルゴリズムを SHA256 に設定する HashAlgorithm パラメーターを使用します。
3 番目のコマンドは、$signingParameters
で定義されているパラメーターをスプラッティングしてスクリプトに署名します。
証明書ファイルがパスワードで保護されている場合、PowerShell によってパスワードの入力が求められます。
例 3 - ルート機関を含む署名を追加する
このコマンドは、信頼チェーンのルート機関を含むデジタル署名を追加し、サード パーティのタイムスタンプ サーバーによって署名されます。
$signingParameters = @{
FilePath = 'C:\scripts\Remodel.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
IncludeChain = 'All'
TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters
このコマンドでは、FilePath パラメーターを使用して、署名するスクリプトを指定し、Certificate パラメーターを使用して、$cert
変数に保存される証明書を指定します。
IncludeChain パラメーターを使用して、ルート証明機関を含む、信頼チェーン内のすべての署名を含めます。 また、TimeStampServer パラメーターを使用して、署名にタイムスタンプを追加します。
これにより、証明書の有効期限が切れたときにスクリプトが失敗するのを防ぐことができます。
2 番目のコマンドは、$signingParameters
で定義されているパラメーターをスプラッティングしてスクリプトに署名します。
パラメーター
-Certificate
スクリプトまたはファイルの署名に使用する証明書を指定します。 証明書を表すオブジェクトまたは証明書を取得する式を格納する変数を入力します。
証明書を検索するには、Get-PfxCertificate
を使用するか、証明書 Get-ChildItem
ドライブの Cert:
コマンドレットを使用します。 証明書が有効でない場合、または code-signing
権限を持っていない場合、コマンドは失敗します。
型: | X509Certificate2 |
配置: | 1 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Confirm
コマンドレットを実行する前に確認を求めるメッセージが表示されます。
型: | SwitchParameter |
Aliases: | cf |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Content
このパラメーターは、Set-AuthenticodeSignature
派生元の基底クラスで定義されているため、構文一覧に表示されます。 ただし、このパラメーターのサポートは、Set-AuthenticodeSignature
では実装されていません。
型: | Byte[] |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-FilePath
署名されているファイルへのパスを指定します。
型: | String[] |
配置: | 1 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-Force
コマンドレットが読み取り専用ファイルに署名を追加できるようにします。 Force パラメーターを使用しても、コマンドレットはセキュリティ制限をオーバーライドできません。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-HashAlgorithm
Windows がファイルのデジタル署名を計算するために使用するハッシュ アルゴリズムを指定します。
既定値は SHA1 です。 別のハッシュ アルゴリズムで署名されたファイルは、他のシステムでは認識されない可能性があります。 サポートされているアルゴリズムは、オペレーティング システムのバージョンによって異なります。
使用可能な値の一覧については、hashAlgorithmName 構造体 参照してください。
型: | String |
配置: | Named |
規定値: | Null |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-IncludeChain
デジタル署名に含める証明書信頼チェーン内の証明書を決定します。 NotRoot が既定値です。
有効な値は次のとおりです。
-
Signer
: 署名者の証明書のみが含まれます。 -
NotRoot
: ルート証明機関を除く、証明書チェーン内のすべての証明書が含まれます。 -
All
: 証明書チェーン内のすべての証明書が含まれます。
型: | String |
配置: | Named |
規定値: | NotRoot |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-LiteralPath
署名されているファイルへのパスを指定します。 FilePathとは異なり、LiteralPath パラメーターの値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。
型: | String[] |
Aliases: | PSPath |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-SourcePathOrExtension
このパラメーターは、Set-AuthenticodeSignature
派生元の基底クラスで定義されているため、構文一覧に表示されます。 ただし、このパラメーターのサポートは、Set-AuthenticodeSignature
では実装されていません。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-TimestampServer
指定したタイム スタンプ サーバーを使用して、署名にタイム スタンプを追加します。 タイム スタンプ サーバーの URL を文字列として入力します。 URL は http://
で始まる必要があります。
タイムスタンプは、証明書がファイルに追加された正確な時刻を表します。 タイムスタンプを使用すると、ユーザーとプログラムが署名時に証明書が有効であることを確認できるため、証明書の有効期限が切れた場合にスクリプトが失敗するのを防ぐことができます。
型: | String |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-WhatIf
コマンドレットを実行した場合の動作を示します。 コマンドレットは実行されません。
型: | SwitchParameter |
Aliases: | wi |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
このコマンドレットへのファイル パスを含む文字列をパイプ処理できます。
出力
このコマンドレットは、設定した値を表す Signature オブジェクトを返します。