Set-AuthenticodeSignature
將 Authenticode 簽章新增至 PowerShell 腳本或其他檔案。
語法
ByPath (預設值)
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-FilePath] <String[]>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
ByLiteralPath
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
-LiteralPath <String[]>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
ByContent
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
-SourcePathOrExtension <String[]>
-Content <Byte[]>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Set-AuthenticodeSignature Cmdlet 會將 Authenticode 簽章新增至任何支持主體介面套件 (SIP) 的檔案。
在 PowerShell 腳本檔案中,簽章會採用文字區塊的形式,指出腳本中執行的指令結尾。 如果此 Cmdlet 執行時檔案中有簽章,則會移除該簽章。
範例
範例 1 - 使用來自本機證書存儲的憑證簽署腳本
這些命令會從PowerShell憑證提供者擷取程式代碼簽署憑證,並用它來簽署PowerShell腳本。
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
FilePath = 'PsTestInternet2.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
第一個命令會使用 Get-ChildItem Cmdlet 和 PowerShell 憑證提供者,在證書存儲的 Cert:\CurrentUser\My 子目錄中取得憑證。
Cert: 磁碟驅動器是由憑證提供者公開的磁碟驅動器。 只有憑證提供者支援 CodeSigningCert 參數,會將擷取的憑證限製為具有程式代碼簽署授權單位的憑證。 命令會將結果儲存在 $cert 變數中。
第二個命令會使用 $signingParameters Cmdlet 的參數,將 變數定義為 Set-AuthenticodeSignature,以簽署 PSTestInternet2.ps1 腳本。 它會使用 FilePath 參數來指定腳本的名稱、Certificate 參數來指定憑證儲存在 $cert 變數中,以及 HashAlgorithm 參數,將哈希演算法設定為 SHA256。
第三個命令會藉由將 $signingParameters中定義的參數展開來簽署腳本。
備註
搭配使用 CodeSigningCert 參數時,Get-ChildItem 只會傳回具有程式代碼簽署授權單位且包含私鑰的憑證。 如果沒有私鑰,就無法使用憑證進行簽署。
範例 2 - 使用 PFX 檔案中的憑證簽署腳本
這些命令會使用 Get-PfxCertificate Cmdlet 來載入程式代碼簽署憑證。 然後,使用它來簽署PowerShell腳本。
$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
FilePath = 'ServerProps.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
第一個命令會使用 Get-PfxCertificate Cmdlet,將 C:\Test\MySign.pfx 憑證載入 $cert 變數。
第二個命令會使用 $signingParameters Cmdlet 的參數,將 變數定義為 Set-AuthenticodeSignature,以簽署 ServerProps.ps1 腳本。 它會使用 FilePath 參數來指定腳本的名稱、Certificate 參數來指定憑證儲存在 $cert 變數中,以及 HashAlgorithm 參數,將哈希演算法設定為 SHA256。
第三個命令會藉由將 $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 參數,將時間戳新增至簽章。
這可防止腳本在憑證到期時失敗。
第二個命令會藉由將 $signingParameters中定義的參數展開來簽署腳本。
參數
-Certificate
指定將用來簽署腳本或檔案的憑證。 輸入變數,此變數會儲存代表憑證的物件或取得憑證的表達式。
若要尋找憑證,請使用 Get-PfxCertificate 或使用憑證 Get-ChildItem 磁碟驅動器中的 Cert: Cmdlet。 如果憑證無效或沒有 code-signing 授權單位,命令會失敗。
參數屬性
| 類型: | X509Certificate2 |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Confirm
在執行 Cmdlet 之前,提示您進行確認。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | cf |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Content
此參數會出現在語法清單中,因為它定義於 Set-AuthenticodeSignature 衍生自的基類中。 不過,在 Set-AuthenticodeSignature中不會實作此參數的支援。
參數屬性
| 類型: | Byte[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ByContent
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-FilePath
指定要簽署之檔案的路徑。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ByPath
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-Force
允許 Cmdlet 將簽章附加至唯讀檔案。 即使使用 Force 參數,Cmdlet 也無法覆蓋安全性限制。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-HashAlgorithm
指定 Windows 用來計算檔案數字簽名的哈希演算法。
預設值為SHA1。 在其他系統上可能無法辨識以不同哈希演算法簽署的檔案。 支援的演算法取決於作系統的版本。
如需可能值的清單,請參閱 HashAlgorithmName 結構體。
參數屬性
| 類型: | String |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-IncludeChain
決定在數字簽名中包含哪些憑證信任鏈中的憑證。 NotRoot 是預設值。
有效值為:
-
Signer:只包含簽署者的憑證。 -
NotRoot:包含憑證鏈結中的所有憑證,但根授權單位除外。 -
All:包含憑證鏈結中的所有憑證。
參數屬性
| 類型: | String |
| 預設值: | NotRoot |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-LiteralPath
指定要簽署之檔案的路徑。 與 filePath 不同,LiteralPath 參數的值會與類型完全相同。 不會將任何字元解譯為通配符。 如果路徑包含逸出字元,請以單引弧括住它。 單引號會告知PowerShell不要將任何字元解譯為逸出序列。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | PSPath |
參數集
ByLiteralPath
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-SourcePathOrExtension
此參數會出現在語法清單中,因為它定義於 Set-AuthenticodeSignature 衍生自的基類中。 不過,在 Set-AuthenticodeSignature中不會實作此參數的支援。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ByContent
| Position: | Named |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-TimestampServer
使用指定的時間戳伺服器,將時間戳新增至簽章。 輸入時間戳伺服器的 URL 做為字串。 URL 必須以 http:// 開頭。
時間戳代表憑證新增至檔案的確切時間。 時間戳可防止腳本在憑證到期時失敗,因為使用者和程式可以驗證憑證在簽署時是否有效。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-WhatIf
顯示 Cmdlet 執行時會發生什麼事。 該 Cmdlet 未被執行。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 無線 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
String
您可以使用管線傳送包含此 Cmdlet 檔案路徑的字串。
輸出
Signature
此 Cmdlet 會傳回代表其設定值的 Signature 物件。