
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")'