我必須使用來自遠程計算機的證書來簽署遠程腳本,並從中獲得.pfx文件。使用Get-PfxCertificate自動簽署PowerShell腳本
我想通過以編程方式向Get-PfxCertificate提供密碼來自動執行腳本。
所以,問題是:
是否有可能以某種方式提供編程所需的密碼
GET-PfxCertificate?
我必須使用來自遠程計算機的證書來簽署遠程腳本,並從中獲得.pfx文件。使用Get-PfxCertificate自動簽署PowerShell腳本
我想通過以編程方式向Get-PfxCertificate提供密碼來自動執行腳本。
所以,問題是:
是否有可能以某種方式提供編程所需的密碼
GET-PfxCertificate?
我做了一些檢查,無法找到一個乾淨的方式來提供密碼編程。我懷疑這是出於安全原因。無論是這個還是PowerShell開發團隊都會因爲不包含此cmdlet的Credential參數而導致它失敗。我唯一能想到的另一個選擇是像SendKeys一樣通過後臺作業在適當的時候將單個密碼字符按鍵發送到PowerShell控制檯(blech - 只是在我嘴裏吐了一下)。 :-)
$CertPath = "my.pfx"
$CertPass = "mypw"
$Cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertPath, $CertPass)
Set-AuthenticodeSignature -Certificate $Cert -TimeStampServer http://timestamp.verisign.com/scripts/timstamp.dll -FilePath $OutputFilename
請確保您具有適當的權限,否則您將無法創建X509Certificate2對象的實例。
另一種方法是使用PS提供程序直接從證書存儲區加載證書。使用Get-PSProviders來確定您的計算機上可用的PSProviders。 一旦證書提供商加載,可以使用現在拿到證書獲取,ChildItem
啓動certmgr.msc從運行啓動證書存儲
假設您的證書是根據個人文件夾存儲在您的證書存儲
並具有「公司名稱」設置在證書的主題屬性,只有與公司名稱在主題文件夾中的證書 - 你可以拿到證書,像這樣
$my_cert = Get-ChildItem cert:\CurrentUser\My | ? {$_.Subject -match "Company Name"}
$ my_cert將是您的證書對象,您可以直接傳遞到的Set-AuthenticodeSignature cmdlet的
Set-AuthenticodeSignature -Certificate $my_cert -FilePath fqn_to_dll.dll -Timestampserver "http://timestampurl"
後簽字,您可以通過查詢狀態屬性檢索符號狀態「有效」或不喜歡
$result = Set-AuthenticodeSignature -Certificate $my_cert -FilePath fqn_to_dll.dll -Timestampserver "http://timestampurl" | Select Status
if(-Not ($result -eq "Valid")){
Write-Output "Error Signing file: Status: $($result.Status)"
}