PowerShell-Skripte können nicht signiert werden

8

Ich kann meine Skripte scheinbar nicht dazu bringen, sich in PowerShell anzumelden. Ich habe ein gültiges Codesignaturzertifikat auf meinem Computer installiert und 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      : E=operations@contoso.com, 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
Chad Miller
quelle
Gut zu wissen. Ich habe mir Ihre Frage angesehen, weil ich meine Skripte auch nicht signieren kann, ohne Administrator auf dem PC zu sein. Ich fragte sie hier: superuser.com/questions/174878/...
Bratch
4
Gute Frage und vielen Dank für die Rückmeldung. Sie sollten Ihre Bearbeitung im Antwortbereich veröffentlichen und sie nach dem Timeout als korrekt markieren, damit die Benutzer besser sehen können, dass diese Frage beantwortet wurde.
Caleb
Ich hatte ein ähnliches Problem beim Versuch, Subversion beim Bearbeiten von Skripten in der ISE zu verwenden. Subversion beschwerte sich, dass die von der ISE gespeicherten Dateien vom Typ 'Binary Mime' seien und sie nicht zum Repository hinzufügen würden. Ich habe in meiner Antwort unten eine reibungslosere Problemumgehung für den Ansatz "Notepad.exe" veröffentlicht.
Ryan Fisher

Antworten:

4

Herausgefunden. Die Skriptdatei wurde mit PowerShell ISE erstellt, und anscheinend können Sie in PowerShell ISE erstellte Skripte nicht signieren, oder genauer gesagt, Sie können keine mit Unicode Big Endian codierten Dateien signieren, was die Standardeinstellung für ISE ist. Es gibt eine Problemumgehung, um die im Link dokumentierte Standardcodierung zu ändern.


Ursprünglich zur Frage von Chad Miller hinzugefügt . Das Update wurde auf eine Antwort verschoben, sodass diese Frage nicht mehr als unbeantwortet angezeigt wird.

Zoredache
quelle
Gut zu wissen, dass mich das Problem mit der Unicode-Dateicodierung an anderer Stelle gebissen hat (ein schlecht geschriebener XML-Parser).
Helvick
Und ich neulich beim Schreiben eines Skripts zum Exportieren von MS-DHCP-Leases für BIND DHCP. Wieder Unicode.
sysadmin1138
3

Sie können eine Datei als bestimmte Codierung in der Powershell ISE mit der .Save () -Methode 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 Standardcodierung 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 Quickie-Code zum Erstellen Ihres Profils, falls es nicht vorhanden ist, und zum Hinzufügen des Menüs. Führen Sie diesen Code in der ISE aus, oder fügen Sie Ihrem ConsoleHost-Profil einfach Junk hinzu, bei dem nur ein Fehler auftritt:

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