Set-AuthenticodeSignature

Authenticode 署名を PowerShell スクリプトまたはその他のファイルに追加します。

構文

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 番目のコマンドは、PSTestInternet2.ps1 スクリプトに署名するSet-AuthenticodeSignature コマンドレットのパラメーターを使用して$signingParameters変数を HashTable として定義します。 FilePath パラメーターを使用してスクリプトの名前を指定し、Certificate パラメーターを使用して証明書を$cert変数に格納し、HashAlgorithm パラメーターを使用してハッシュ アルゴリズムを SHA256 に設定します。

3 番目のコマンドは、 $signingParametersで定義されているパラメーターをスプラッティングしてスクリプトに署名します。

Note

Get-ChildItemCodeSigningCert パラメーターを使用すると、コード署名機関を持ち、秘密キーを含む証明書のみが返されます。 秘密キーがない場合は、署名に証明書を使用できません。

例 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 番目のコマンドは、ServerProps.ps1 スクリプトに署名するSet-AuthenticodeSignature コマンドレットのパラメーターを使用して$signingParameters変数を HashTable として定義します。 FilePath パラメーターを使用してスクリプトの名前を指定し、Certificate パラメーターを使用して証明書を$cert変数に格納し、HashAlgorithm パラメーターを使用してハッシュ アルゴリズムを SHA256 に設定します。

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

最初のコマンドでは、 $signingParameters 変数を HashTable として定義 スクリプトに署名する Set-AuthenticodeSignature コマンドレットのパラメーターを指定します。 FilePath パラメーターを使用してスクリプトへのパスを指定し、Certificate パラメーターを使用して証明書を$cert変数に格納することを指定し、HashAlgorithm パラメーターを使用してハッシュ アルゴリズムを SHA256 に設定します。 IncludeChain パラメーターを使用して、ルート証明機関を含む、信頼チェーン内のすべての署名を含めます。 また、 TimeStampServer パラメーターを使用して、署名にタイムスタンプを追加します。 これにより、証明の有効期限が切れた場合にもスクリプトは失敗しません。

2 番目のコマンドは、 $signingParametersで定義されているパラメーターをスプラッティングしてスクリプトに署名します。

パラメーター

-Certificate

スクリプトまたはファイルへの署名に使用する証明書を指定します。 証明書を表すオブジェクトを格納する変数、または証明書を取得する式を入力します。

証明書を検索するには、Get-PfxCertificateを使用するか、証明書Cert: ドライブの Get-ChildItem コマンドレットを使用します。 証明書が有効でない場合、または 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 が既定値です。

有効な値は次の通りです。

  • 署名者: 署名者の証明書のみが含まれます。
  • NotRoot: ルート証明機関を除き、証明書チェーン内のすべての証明書が含まれます。
  • すべて: 証明書チェーン内のすべての証明書が含まれます。
型: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 を文字列として入力します。

タイム スタンプは、証明書がファイルに追加された正確な時間を表します。 タイム スタンプを使用すると、署名時に証明書が有効だったことをユーザーとプログラムで検証できるため、証明書の期限が過ぎている場合であってもスクリプトは失敗しません。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-WhatIf

コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。

型:SwitchParameter
Aliases:wi
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

String

このコマンドレットへのファイル パスを含む文字列をパイプ処理できます。

出力

Signature

このコマンドレットは、設定した値を表す Signature オブジェクトを返します。