Mrz 302012
 
  • 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]

ps_sign_unknownerror

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.

powershell_ise

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.

 Antworten

(erforderlich)

(erforderlich)