Eintrag im PowerShell-Skriptkontextmenü zum Ausführen des Skripts als Administrator ohne Beenden

479
jippyjoe4

Ich bin wirklich nahe dran. Grundsätzlich möchte ich einen Kontextmenüeintrag für .ps1-Dateien erstellen, die das Skript als Administrator ausführen, ohne das Konsolenfenster nach dem Ausführen zu beenden. So kann ich den Schlüssel erstellen:

Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\shell\RunasAdministratorNoExit 

mit den Werten:

enter image description here

und das ist alles schön und schön, um den Eintrag zu erstellen . Um jedoch zu tatsächlich machen es tun etwas, ich brauche einen anderen Schlüssel zu addieren, die Befehlstaste:

Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\shell\RunasAdministratorNoExit\command 

Und in diesem Schlüssel habe ich etwas, das fast funktioniert, aber nicht ganz. Der Standardwert der obigen Befehlstaste lautet also:

Powershell.exe -WindowStyle Hidden -Command "& " 

Bei dieser Methode gibt es jedoch ein großes Problem . Wenn das Skript beendet ist, wird das Verzeichnis "C: \ Windows \ system32" anstelle des Verzeichnisses des Skripts angezeigt. Siehe mein Bild unten zur Verdeutlichung:

enter image description here Wenn ich den Kontextmenüeintrag verwende, den ich erstellt habe, um Skripts auszuführen, die folgende Zeilen enthalten:

$settingsfiles = Get-ChildItem -Recurse $scanPath 

Statt durch alle lokalen Ordner des gerade ausgeführten Skripts zu rekursieren, versucht es, alle Ordner unter "C: \ Windows \ system32!" Dies ist eindeutig unerwünscht. Also hier meine Frage:

Was muss ich an dem Standardwert des Befehlsschlüssels ändern, damit das PowerShell-Skript so wirkt, als ob es aus demselben Verzeichnis wie das Skript ausgeführt würde?

1

1 Antwort auf die Frage

1
postanote

Nutzen Sie das Cmdlet ... Set-Location oder Push-Location oder den Scritpblock ...

Split-Path $ -Skript: MyInvocation.MyCommand.Path

... in Ihrem letzten Befehl.

Oder erstellen Sie einfach eine neue Verknüpfung, konfigurieren Sie sie wie gewünscht und verwenden Sie das Rechtsklick-Menü "SendTo", ohne dass ein Registrierungs-Hacking erforderlich ist.

In diesem Thread wird der SendTo-Ansatz für PowerShell dargestellt.

Von Pause-Skript akzeptierte PowerShell-Grenzschlüssel

Die Syntax ist jedoch der Teil, der mich mit dem Befehl set-location auslöst. Wie kann ich das in den Registrierungseintrag integrieren, während die Datei immer noch an Powershell übergeben wird, sodass das ursprüngliche Skript ausgeführt wird? Ich muss grundsätzlich -command und -file gleichzeitig verwenden, aber ich bin nicht sicher, ob das funktioniert. Kannst du ein Beispiel geben? jippyjoe4 vor 5 Jahren 0
Okay, ich habe es herausgefunden, nachdem ich viel zu lange herumgespielt habe. Die Zitate haben mich umgebracht. Das musste die Zeile sein: Powershell.exe -WindowStyle Hidden -Command "& " jippyjoe4 vor 5 Jahren 0
Ich bin froh, dass alles geklappt hat. Ja, die Notierung kann ein PTA sein. Ein kurzes C & P-In Ihrer Zeile in ISE oder VSCode zeigt jedoch immer noch Syntaxfehler. Wissen Sie, das ganze Farbcodierungs-Ding, das aus dem Editor zurückschreit. Alles aus diesem [% 1 "" '' -parent); & '' "" "% 1" "" "" "" -verb runAs} "] zeigt die falschen Farben (lila gegen purpurrotes Rot) an im Befehlsblock sein. Also, ein bisschen seltsam funktioniert es so wie es ist. Wenn doch, ist das alles, worauf es ankommt. Ich muss damit spielen, um es sicher zu sagen. postanote vor 5 Jahren 0