Wejście do menu kontekstowego skryptu PowerShell, aby uruchomić skrypt jako administrator bez wyjścia

1

Jestem naprawdę blisko tego. Zasadniczo chcę utworzyć pozycję menu kontekstowego dla plików .ps1, które uruchamiają skrypt jako administrator bez wychodzenia z okna konsoli po uruchomieniu. Więc mogę utworzyć klucz:

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

z wartościami:

enter image description here

i to wszystko w porządku i elegancko Stwórz wejście. Jednak aby to zrobić robić coś, muszę dodać inny klucz, klawisz polecenia:

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

I w tym kluczu mam coś takiego prawie działa, ale nie do końca. Zatem domyślną wartością powyższego klawisza polecenia jest:

Powershell.exe -WindowStyle Hidden -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList '-NoLogo -NoExit -File """%1"""'}"

Ale tutaj jest jeden duży problem tą metodą; po zakończeniu skryptu zwraca mnie do katalogu „C: Windows 32” zamiast katalogu samego skryptu. Zobacz moje zdjęcie poniżej w celu wyjaśnienia:

enter image description here Ponadto, gdy używam wpisu w menu kontekstowym, stworzyłem skrypty zawierające linie takie jak:

$settingsfiles = Get-ChildItem -Recurse $scanPath

Zamiast rekurencyjnie przechodzić przez wszystkie foldery lokalne do skryptu, który właśnie uruchomiłem, próbuje przekierować przez wszystkie foldery w „C: Windows 32!” Oczywiście jest to niepożądane. Oto moje pytanie:

Co muszę zmienić w domyślnej wartości klawisza polecenia, aby skrypt PowerShell działał tak, jakby był uruchamiany z tego samego katalogu co skrypt?

jippyjoe4
źródło

Odpowiedzi:

1

Spróbuj wykorzystać ... Cmdlet Set-Location lub Push-Location lub scritpblock…

Podział ścieżki $ skrypt: MyInvocation.MyCommand.Path

... w twoim ostatnim poleceniu.

Lub po prostu utwórz nowy skrót, skonfigurowany tak, jak sobie życzysz, i użyj menu Wyślij prawym przyciskiem myszy, aby nie wymagać hakowania.

Zobacz ten wątek pokazujący podejście SendTo dla PowerShell.

Klucze ograniczające PowerShell akceptowane przez pauzę

postanote
źródło
Składnia jest jednak częścią, która mnie wyzwala za pomocą polecenia set-location. W jaki sposób włączyć to do wpisu rejestru, nadal przekazując plik do powershell, aby uruchomić oryginalny skrypt? Zasadniczo muszę użyć -command i -file w tym samym czasie, ale nie jestem pewien, czy to działa. Czy możesz podać przykład?
jippyjoe4
Ok, zrozumiałem to po zbyt długim bałaganie. Cytaty mnie zabijały. Oto, czym powinna być linia: Powershell.exe -WindowStyle Hidden -Command "& amp; {Start-Process powershell.exe -ArgumentList" -nologo -noexit -command "" & amp; {set-location (split-path '' „” „% 1” ”„ ”„ rodzic ”; & amp;” „” „1%” „” „” „” „run-run”
jippyjoe4
Cieszę się, że wszystko się udało. Cytaty, cytat może być PTA. Jednak szybki C & amp; P w twojej linii do ISE lub VSCode nadal pokazuje błędy składniowe. Wiesz, ta cała rzecz kodowania kolorów wraca z edytora. Wszystko z tego [% 1 ”„ ”” „-parent”; & amp; '' ”„ ”1%” „” ”„ ”” „” „run-run”) pokazuje nieprawidłowe kolory (purpurowy vs karmazynowy) być w bloku poleceń. Trochę dziwne, że tak działa. A jeśli tak, to się liczy. Będę musiał się z tym bawić, żeby powiedzieć na pewno.
postanote