Skript als Admin via Kontextmenü
Powershell Skripte haben in der Handhabung einen kleinen Nachteil gegenüber Batch-Skripten: Sie lassen sich nicht einfach über das (Rechtsklick-)Kontextmenü als Administrator starten.
Kontextmenüeintrag für ein bestimmtes Skript
Erstellt von der Skriptdatei eine Verknüpfung via Rechtsklick -> Senden an -> Desktop und öffnet die Eigenschaften dieser Verknüpfung. Unter Ziel wird der Pfad zur .ps1 Datei angegeben. Verändert das Ziel folgendermaßen:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -NoExit "[Pfad]"
Optional kann über „Anderes Symbol…“ -> C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -> das Powershell-Icon mit UAC-Icon eingestellt werden. Somit ist die Verknüpfung visuell als eine Admin-fähige Verküpfung gekennzeichnet:
Kontextmenüeintrag für jedes Skript
Noch besser: Der Kontextmenü-Eintrag „Als Administrator ausführen“ bei jeder Powershell-Datei, ohne Verknüpfung. Hierzu müssen in der Registry Änderungen gemacht werden, die sich am einfachsten über Batch Skripte ausführen lassen:
Kontextmenüeintrag hinzufügen:
:: Add value for UAC shield icon: REG ADD "HKCR\Microsoft.PowerShellScript.1\Shell\runas" /v HasLUAShield /t REG_SZ /d "" /f :: Add value to create context menu item: REG ADD "HKCR\Microsoft.PowerShellScript.1\Shell\runas\command" /ve /t REG_EXPAND_SZ /d "\"%%SYSTEMROOT%%\System32\WindowsPowerShell\v1.0\powershell.exe\" -executionpolicy bypass -nologo -file \"%%1\"" /f
(Hinweise: Der Code MUSS mit Adminrechten in der CMD ausgeführt werden – entweder von Hand oder in einem .bat Skript zwischenlagern.)
Kontextmenüeintrag wieder entfernen:
REG DELETE "HKCR\Microsoft.PowerShellScript.1\Shell\runas" /f
Als Powershell Befehl
Gerade mal ausprobiert -> funktioniert!
Ich musste das Powershell Skript allerdings als Administrator ausführen, damit die Registry Änderungen geschrieben werden. Muss man also wissen, wie das geht. Klein bisschen ein Teufelskreis 😉
Während das hier klappt:
REG ADD „HKCR\Microsoft.PowerShellScript.1\Shell\runas“ /v HasLUAShield /t REG_SZ /d „“ /f
wird der 2.Teil leider mit einem „FEHLER: Ungültige Syntax.“ bedacht:
REG ADD „HKCR\Microsoft.PowerShellScript.1\Shell\runas\command“ /ve /t REG_EXPAND_SZ /d „\“%%SYSTEMROOT%%\System32\WindowsPowerShell\v1.0\powershell.exe\“ -executionpolicy bypass -nologo -file \“%%1\““ /f
Woran liegts? (Windows 10 Pro 20H2)
(Der Code von Ralf Lauerwald funktioniert jedoch)
Den letzten Teil mit folgender Zeile ersetzen:
REG ADD „HKCR\Microsoft.PowerShellScript.1\Shell\runas\command“ /ve /t REG_EXPAND_SZ /d ‚“%%SYSTEMROOT%%\System32\WindowsPowerShell\v1.0\powershell.exe“ -executionpolicy bypass -nologo -file „%%1″‚ /f
Hintergrund, das Escapen von Quotes funktioniert in PowerShell anders