Beim Erstellen einer Windows-Verknüpfung zum Starten eines PowerShell
Skripts funktioniert Folgendes einwandfrei, wenn Sie als normaler Benutzer und mit der rechten Maustaste darauf doppelklicken Run as administrator
:
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy "Bypass" -Command "&{& 'C:\Script.ps1'}"
Wenn der Pfad jedoch relativ und im Voraus nicht bekannt ist, funktioniert Folgendes gut, wenn es als normaler Benutzer doppelgeklickt wird, aber nicht mit der rechten Maustaste Run as administrator
:
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy "Bypass" -Command "&{& '.\Script.ps1'}"
Meine Frage, wie kann ich es in beiden Fällen funktionieren lassen, wenn der Pfad relativ ist? Ich habe versucht, es zu verwenden, PSScriptRoot
aber das hat auch nicht funktioniert.
Danke für deine Hilfe.
Lösung des Problems
Beim Starten als Administrator aus dem Explorer müssen Sie einen absoluten Pfad zum Skript angeben.
Explorer.exe ignoriert das Startverzeichnis aus der Verknüpfung, wenn ein Prozess als Administrator gestartet wird. Stattdessen starten Prozesse auf Administratorebene immer mit dem aktuellen Verzeichnis in [Environment]::GetFolderPath('System')
(normalerweise C:\Windows\System32
)
Die einfache Möglichkeit, in einem anderen Verzeichnis auszuführen, besteht darin, das Verzeichnis am Anfang Ihres Skripts zu wechseln. Die folgende Zeile führt cd
zu dem Verzeichnis, in dem sich das Skript befindet.
Set-Location $PsScriptRoot
Wenn das Skript in einem anderen Pfad gestartet werden muss, müssen Sie möglicherweise eine Funktion schreiben, um herauszufinden, wo sich dieser Pfad auf dem lokalen Computer befindet (z. B. das Aufzählen von USB-Laufwerken ).
Keine Kommentare:
Kommentar veröffentlichen