無法簽署 PowerShell 腳本

無法簽署 PowerShell 腳本

我似乎無法讓我的腳本登入 PowerShell。我的電腦上安裝了有效的程式碼簽署憑證並執行以下命令。有什麼建議麼?

PS C:\Users\u00\bin> $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
PS C:\Users\u00\bin> $cert | fl


Subject      : [email protected], CN=contoso , OU=Operations, O=contoso,
               L=Mayberry, S=Florida, C=US
Issuer       : CN=contoso Intermediate CA1, DC=contoso, DC=com
Thumbprint   : XXXXXXXXXXXXXXXXXXXXX
FriendlyName : contoso 
NotBefore    : 7/20/2010 12:58:55 AM
NotAfter     : 7/20/2011 12:58:55 AM
Extensions   : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oi
               ystem.Security.Cryptography.Oid...}



PS C:\Users\u00\bin> Set-AuthenticodeSignature .\testsign.ps1 -Certificate $cert


    Directory: C:\Users\u00\bin


SignerCertificate                         Status                                 Path
-----------------                         ------                                 ----
                                          UnknownError                           testsign.ps1


PS C:\Users\u00\bin> Get-AuthenticodeSignature .\testsign.ps1

    Directory: C:\Users\u00\bin


SignerCertificate                         Status                                 Path
-----------------                         ------                                 ----
                                          NotSigned                              testsign.ps1

答案1

弄清楚了。該腳本檔案是使用 PowerShell ISE 建立的,顯然您無法簽署在 PowerShell ISE 中建立的腳本或者更準確地說,您無法對 Unicode Big Endian 編碼檔案進行簽名,這是 ISE 的預設設定。有解決方法可以更改連結中記錄的預設編碼。


最初添加到問題中查德·米勒。將他的更新重新定位到答案,以便問題不再顯示為未回答。

答案2

您可以使用 ISEFile 物件的 .Save() 方法從 Powershell ISE 中將檔案儲存為特定編碼:

 $psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)

如果將以下內容新增至 ISE 設定檔中,只需按 Ctrl-Shift-S 即可為腳本取得不同的預設編碼:

$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+S")

這裡有一些快速程式碼,用於建立您的個人資料(如果它不存在)並添加選單。從 ISE 中執行此程式碼,否則您只需將垃圾新增至您的 ConsoleHost 設定檔中,就會出錯:

add-content $profile -value '$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+S")'

相關內容