- Betrifft: Signieren von PowerShell Skripten unter Windows NT6.x
- System: Microsoft Windows Vista, Windows 7, Server 2008 x64 und Windows Server 2008 R2 x64
- Problem: Beim signieren von einzelnen Skripten erhält man den Status "UnknownError". Das PowerShell Skript ist weiterhin nicht digital signiert. Eine Überprüfung zeigt, dass das Zertifikat für die Signierung in Ordnung und nicht abgelaufen ist.
Hintergrund
Mit der Einführung von PowerShell wurde eine zugehörende Ausführungsrichtlinie eingeführt. An sich werden aufgrund der standardmäßigen höheren Sicherheitsanforderung nur signierte Skripte ausgeführt. Die Ausführungsrichtlinie wurde daher mit "ExecutionPolicy" auf "AllSigned" gestellt.
Die Signierung eines Skriptes ist recht einfach durchführbar:
Set-AuthenticodeSignature .\testfile.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesign)[0] |
Leider erhält man trotz korrekten persönlichen Zertifikat für die Codesignatur manchmal nur einen "UnknownError". Das Feld "SignerCertificate" bleibt leer. Der Grund für diesen Fehlertyp ist recht einfach erklärt. Die Datei muss in UTF-8 kodiert sein, ansonsten kann die Datei nicht signiert werden.
Wenn man Windows PowerShell ISE für die Erstellung benutzt, dann werden die Dateien standardmäßig in einem anderen Format kodiert (Unicode Big Endian). Meistens ist dies der auslösende Verursacher.
Behebung
Entweder man kopiert den Inhalt über Notepad (Windows Editor) in eine neue Datei und speichert diese dann als "*.ps1" Datei ab oder alternativ kann man die bereits vorhanden Datei ebenfalls mit Notepad öffnen und über "Speichern unter" mit der richtigen Kodierung (UTF-8) abspeichern. Bei beiden Varianten wird danach die Signierung erfolgreich sein.
Beim Windows PowerShell ISE gibt es leider keine direkte Möglichkeit diesen Umstand zu ändern. Weder kann man die standardmäßige Kodierung ändern, noch bereits vorhandene Dateien anders abspeichern. Es gibt zwar eine etwas unschönere Möglichkeit wo man das PowerShell_ISE Profil Skript anpassen muss, aber bei meinen Versuchen hat das nicht immer reibungslos geklappt.