„Als Administrator ausführen“ bei .ps1 Powershellskripten im Kontextmenü

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.
powershell-skripte-run-as-admin-standard-before

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:
powershell-skripte-run-as-admin-shortcut-after-context-menu

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.)
powershell-skripte-run-as-admin-regedit-batch-commands
powershell-skripte-run-as-admin-regedit-after-context-menu

Kontextmenüeintrag wieder entfernen:

REG DELETE "HKCR\Microsoft.PowerShellScript.1\Shell\runas" /f

via

4 Kommentare

  1. Als Powershell Befehl

    #--------------------------------------Funktionen--------------------------------------------
    function New-Item-RegKey-Recurse ($subkey)
    {
        
        IF ((Split-Path -Path $subkey -Qualifier) -eq "Registry::")
        {
            IF (Test-Path $subkey) { return $true } ELSE { IF (New-Item-RegKey-Recurse (Split-Path -Path $subkey)) 
            {New-Item -Path $subkey}; return $false }
        }
    }  # functions
    #--------------------------------------Hauptteil--------------------------------------------
    #Add value for UAC shield icon:
    $key = "Registry::HKCR\Microsoft.PowerShellScript.1\Shell\runas"
    New-Item-RegKey-Recurse ($key) | Out-Null
    $valuename = "HasLUAShield"
    New-ItemProperty -Type String -Path $key -Name $valuename -value ""
    
    #Add value to create context menu item:
    $key = "Registry::HKCR\Microsoft.PowerShellScript.1\Shell\runas\command"
    New-Item-RegKey-Recurse ($key) | Out-Null
    $valuename = "(Default)"
    $Value = "`"`%SYSTEMROOT`%\System32\WindowsPowerShell\v1.0\powershell.exe`" -executionpolicy bypass -nologo -file `"`%1`""
    New-ItemProperty -Type ExpandString -Path $key -Name $valuename -value $Value
    
    1. 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 😉

  2. 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)

    1. 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

Schreibe einen Kommentar