===== Aufruf von PowerShell Scripten =====
**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?
==== 1. Sicherheit ausschalten ====
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
==== 2. Per Shortcut aufrufen ====
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
----
==== 3. Code signieren ====
Im ersten Schritte wird ein Zertifikat benötigt. Das Zertifikat kann mit [[http://msdn.microsoft.com/en-us/library/windows/desktop/aa386968(v=vs.85).aspx| MakeCert]] angelegt werden. Makecert ist Teil des Windows SDK's.
== A) Download Microsoft Windows SDK for Windows 7 and .NET Framework 4 ==
Link: [[http://www.microsoft.com/en-us/download/details.aspx?id=8279| SDK Installer]] \\
Installer starten und nur die Tools auswählen \\
== B) Lokales Root Zertifikat erstellen ==
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:
* [[http://msdn.microsoft.com/en-us/windows/hardware/gg487309.aspx| Microsoft Code-Signing Best Practices]]