2010-02-23 44 views
1

我必須使用來自遠程計算機的證書來簽署遠程腳本,並從中獲得.pfx文件。使用Get-PfxCertificate自動簽署PowerShell腳本

我想通過以編程方式向Get-PfxCertificate提供密碼來自動執行腳本。

所以,問題是:

是否有可能以某種方式提供編程所需的密碼

GET-PfxCertificate?

回答

1

我做了一些檢查,無法找到一個乾淨的方式來提供密碼編程。我懷疑這是出於安全原因。無論是這個還是PowerShell開發團隊都會因爲不包含此cmdlet的Credential參數而導致它失敗。我唯一能想到的另一個選擇是像SendKeys一樣通過後臺作業在適當的時候將單個密碼字符按鍵發送到PowerShell控制檯(blech - 只是在我嘴裏吐了一下)。 :-)

5
$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對象的實例。

0

另一種方法是使用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)"  
} 
相關問題