共用方式為


Set-AuthenticodeSignature

Authenticode 簽章 新增至 PowerShell 腳本或其他檔案。

Syntax

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>]

Description

此 Cmdlet 僅適用於 Windows 平臺。

Cmdlet 會將 Set-AuthenticodeSignature Authenticode 簽章新增至任何支持主體介面套件的檔案, (SIP) 。

在 PowerShell 腳本檔案中,簽章會採用文字區塊的形式,指出腳本中執行的指令結尾。 如果執行此 Cmdlet 時檔案中有簽章,會移除該簽章。

範例

範例 1 - 使用來自本機證書存儲的憑證簽署腳本

這些命令會從PowerShell憑證提供者擷取程式代碼簽署憑證,並用它來簽署PowerShell腳本。

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert

第一個命令會使用 Get-ChildItem Cmdlet 和 PowerShell 憑證提供者,在證書存儲的子目錄中取得憑證 Cert:\CurrentUser\My 。 磁碟 Cert: 驅動器是由憑證提供者公開的磁碟驅動器。 只有憑證提供者支援的 CodeSigningCert 參數,會將擷取的憑證限製為具有程式代碼簽署授權單位的憑證。 命令會將結果儲存在變數中 $cert

第二個命令會 Set-AuthenticodeSignature 使用 Cmdlet 簽署 PSTestInternet2.ps1 腳本。 它會使用 FilePath 參數來指定腳本的名稱和 Certificate 參數,以指定憑證儲存在變數中 $cert

注意

使用 CodeSigningCert 參數時 Get-ChildItem ,只會傳回具有程式代碼簽署授權單位且包含私鑰的憑證。 如果沒有私鑰,則憑證無法用於簽署。

範例 2 - 使用 PFX 檔案中的憑證簽署腳本

這些命令會 Get-PfxCertificate 使用 Cmdlet 載入程式代碼簽署憑證。 然後,使用它來簽署PowerShell腳本。

$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert

第一個命令會 Get-PfxCertificate 使用 Cmdlet 將 C:\Test\MySign.pfx 憑證 $cert 載入變數。

第二個命令會使用 Set-AuthenticodeSignature 來簽署腳本。 的 Set-AuthenticodeSignatureFilePath 參數會指定要簽署之腳本檔案的路徑,而 Cert 參數會將包含憑證的變數傳遞$certSet-AuthenticodeSignature

如果憑證檔案受到密碼保護,PowerShell 會提示您輸入密碼。

範例 3 - 新增包含根授權單位的簽章

此命令在信任鏈結中加入包含根授權單位的數位簽章,並由協力廠商的時間戳記伺服器進行簽署。

Set-AuthenticodeSignature -FilePath c:\scripts\Remodel.ps1 -Certificate $cert -IncludeChain All -TimestampServer "https://timestamp.fabrikam.com/scripts/timstamper.dll"

此命令會使用 FilePath 參數來指定要簽署的腳本,以及 Certificate 參數來指定儲存在變數中的 $cert 憑證。 它會使用 IncludeChain 參數,在信任鏈結中包含所有簽章,包括根授權單位。 它也會使用 TimeStampServer 參數,將時間戳新增至簽章。 這可防止指令碼在憑證過期時失敗。

參數

-Certificate

指定要用來簽署指令碼或檔案的憑證。 輸入儲存代表憑證之物件的變數,或取得憑證的運算式。

若要尋找憑證,請使用 Get-PfxCertificate 或使用 Get-ChildItem 憑證 Cert: 磁碟驅動器中的 Cmdlet。 如果憑證無效或沒有 code-signing 授權單位,命令就會失敗。

Type:X509Certificate2
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

在執行 Cmdlet 前提示您確認。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Content

此參數會出現在語法清單中,因為它定義於衍生自的基類 Set-AuthenticodeSignature 中。 不過,在 中 Set-AuthenticodeSignature不會實作此參數的支援。

Type:Byte[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-FilePath

指定要簽署的檔案路徑。

Type:String[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Force

可讓 Cmdlet 將簽章附加到唯讀檔案。 即使使用 Force 參數,Cmdlet 也無法覆寫安全性限制。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HashAlgorithm

指定 Windows 用來計算檔案數位簽章的雜湊演算法。

針對 PowerShell 7.3,預設值為 SHA256,這是 Windows 預設哈希演算法。 針對舊版,預設值為SHA1。 在其他系統上可能無法辨識以不同雜湊演算法所簽署的檔案。 支援的演算法取決於作業系統的版本。

如需可能值的清單,請參閱 HashAlgorithmName 結構

Type:String
Position:Named
Default value:SHA256
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeChain

判斷數位簽章中包含憑證信任鏈結中的哪個憑證。 NotRoot 是預設值。

有效值為:

  • Signer:只包含簽署者的憑證。
  • NotRoot:包含憑證鏈結中 (除了根授權單位) 的所有憑證。
  • 全部:包含憑證鏈結中的所有憑證。
Type:String
Position:Named
Default value:NotRoot
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

指定要簽署的檔案路徑。 LiteralPath 參數值與 FilePath 不同,會完全依照其輸入值來使用。 沒有字元會被視為萬用字元。 如果路徑包含逸出字元,請將它括在單引號中。 單引號會告訴PowerShell不要將任何字元解譯為逸出序列。

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-SourcePathOrExtension

此參數會出現在語法清單中,因為它定義於衍生自的基類 Set-AuthenticodeSignature 中。 不過,在 中 Set-AuthenticodeSignature不會實作此參數的支援。

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-TimestampServer

使用指定的時間戳記伺服器將時間戳記加入簽章。 以字串方式輸入時間戳記伺服器的 URL。 URL 必須以 https://http://開頭。

時間戳記代表憑證加入檔案的確切時間。 如果憑證過期,時間戳記會防止指令碼失敗,因為使用者和程式可以驗證憑證在簽署時是有效的。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

顯示執行 Cmdlet 後會發生的情況。 Cmdlet 並不會執行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

String

您可以使用管線傳送包含此 Cmdlet 檔案路徑的字串。

輸出

Signature

此 Cmdlet 會傳回 Signature 物件,代表它設定的值。

備註

此 Cmdlet 僅適用於 Windows 平臺。