fritzo
Goto Top

Powershell-Scripts ohne Anzeige aufrufen

Ich habe ein Powershell-Script geschrieben, welches personalisierte Vorlagenpfade für MS Office für den angemeldeten User aus dem Active Directory ausliest - diese Pfade haben wir für alle User als AD-Attribut gespeichert. Um den Usern den Pfad auf ihren Vorlagenordner mitgeben zu können, habe ich im Office-GPO (User-Policy) einen immediate scheduled task angelegt und diesem das Script hinzugefügt. Wenn die Policy gezogen wird, wird das Script ausgeführt und der entsprechende Office-Regkey mit dem Pfad als Wert befüllt, so daß Word die Vorlagen aus diesem ziehen kann. Auf diese Weise können wir Kunden unterschiedliche Pfade mit nur einer zentralen Office-Policy und einem Deployment-Paket mitgeben, was standardmäßig nicht funktioniert, da über das GPO nur ein einziger Pfad vorgegeben werden kann.

Das klappt auch wunderbar, nur habe ich nach Aktivierung festgestellt, daß das Konsolenfenster des Scripts bei jedem gpupdate kurz aufblitzt, obwohl ich dem Aufruf im Taskjob den Parameter powershell.exe -WindowStyle Hidden mitgegeben habe. Das stört natürlich, da es während des Arbeitens alle 90 Minuten beim Refresh der Policy passiert. Nachdem ich mit “Out-Null”, “>$nul 2&>1” und anderem herum experimentiert hatte, bin ich von einem Kollegen auf folgendes Issue gestoßen worden.

powershell.exe -WindowStyle Hidden funktioniert also derzeit nicht korrekt bzw. nicht wie erwartet, da sich die Konsole nicht unterdrücken lässt, die powershell.exe lässt sich ohne weitere Hilfsmittel nicht versteckt aufrufen. Der Diskussionsthread des Issues enthält u.a. folgenden Workaround, der im Test unter Windows 10 1809, Windows 7 x64 und Windows 7 x86 mit >= PS 4.0 bei mir sauber funktioniert hat.

Ein VBScript namens ps-run.vbs erstellen:
Set objShell = CreateObject("Wscript.Shell")  
Set args = Wscript.Arguments
For Each arg In args
	objShell.Run("powershell -windowstyle hidden -executionpolicy bypass -noninteractive ""&"" ""'" & arg & "'"""),0  
Next

… und dieses dann mit WSCRIPT (wichtig) und dem auszuführenden Powershell-Script als Parameter aufrufen:
wscript "C:\Path\To\ps-run.vbs" "C:\Other\Path\To\your-script.ps1"  

Ruft man das Script so auf, unterbleibt das Konsolenpopup gänzlich und das Script wird ausgeführt, ohne User zu nerven.

Gruß,
Fritz

Content-Key: 516716

Url: https://administrator.de/contentid/516716

Ausgedruckt am: 19.03.2024 um 07:03 Uhr