Angelegt 2012/08/10
Per default können PowerShell Scripte nicht automatisch aufgerufen werden.
Wie aber nun ein solches Skript z.B über einen Job aufrufen?
Mit „get-ExecutionPolicy“ kann der interne Sicherheitsmechanismus abgeschaltet werden: (Aufruf im Administrativen Modus!)
#Aktuelle Einstellung get-Executionpolicy -list #Auf den Scope achten zb. set-ExecutionPolicy -scope CurrentUser RemoteSigned
Mit dem Aufrufparameter „-ExecutionPolicy Bypass“ kann die Sicherheit ausgeschaltet werden.
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -NonInteractive -File d:\PowerShell\myscript.ps1
Im ersten Schritte wird ein Zertifikat benötigt. Das Zertifikat kann mit MakeCert angelegt werden. Makecert ist Teil des Windows SDK's.
Link: SDK Installer
Installer starten und nur die Tools auswählen
Aufruf von makecert um eine lokale „authority“ zu erstellen.
Dazu die PowerShell im administrativen Modus starten!
cd "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin" .\makecert -n "CN=GPI Local Certificate" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer -ss Root -sr localMachine
In der Kennwort Box die Kennworte für das root zertifikat vergeben.
Zertifikat erstellen
.\makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer
Obiges Kennwort eingeben.
In der PowerShell anzeigen lassen
Get-ChildItem cert:\CurrentUser\My -codesign
Das Script kann nun signiert werden
Set-AuthenticodeSignature .\myscript.ps1 @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Die Ausführung von signierten Scripten erlauben
Set-ExecutionPolicy –scope CurrentUser AllSigned
Das signierte Script aufrufen.
Falles es nicht funktioniert, aktuelle Einstellungen prüfen mit:
get-executionpolicy -list
Auf den richtigen Scope achten!
Quellen: