PowerShell-Skripts können nicht signiert werden

PowerShell-Skripts können nicht signiert werden

Ich kann meine Skripte scheinbar nicht in PowerShell anmelden. Auf meinem Computer ist ein gültiges Codesignaturzertifikat installiert und ich führe die folgenden Befehle aus. Irgendwelche Vorschläge?

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

Antwort1

Ich habe es herausgefunden. Die Skriptdatei wurde mit PowerShell ISE erstellt und anscheinendIn PowerShell ISE erstellte Skripts können nicht signiert werdenoder genauer gesagt, Sie können keine Unicode Big Endian-codierten Dateien signieren, was der Standard für ISE ist. Es gibt einen Workaround, um die Standardcodierung zu ändern, wie im Link dokumentiert.


Ursprünglich zur Frage hinzugefügt vonChad Miller. Hat sein Update in eine Antwort verschoben, sodass diese Frage nicht mehr als unbeantwortet angezeigt wird.

Antwort2

Sie können eine Datei in einer bestimmten Kodierung aus der Powershell ISE heraus mit der Methode .Save() des ISEFile-Objekts speichern:

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

Wenn Sie Ihrem ISE-Profil Folgendes hinzufügen, können Sie einfach Strg-Umschalt-S drücken, um eine andere Standardkodierung für Ihre Skripte zu erhalten:

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

Hier ist ein kurzer Code, um Ihr Profil zu erstellen, falls es noch nicht existiert, und um das Menü hinzuzufügen. Führen Sie diesen Code innerhalb der ISE aus, sonst fügen Sie Ihrem ConsoleHost-Profil nur Müll hinzu, was zu einer Fehlermeldung führt:

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

verwandte Informationen