Wiesz jak, jeśli jesteś administratorem systemu i możesz po prostu kliknąć prawym przyciskiem myszy powiedz, skrypt wsadowy i uruchomić go jako Administrator bez podawania hasła administratora?
Zastanawiam się, jak to zrobić za pomocą skryptu PowerShell. Nie chcę wprowadzać hasła; Chcę tylko naśladować metodę Uruchom jako administrator prawym przyciskiem myszy .
Wszystko, co do tej pory czytałem, wymaga podania hasła administratora.
powershell
administrator
chrips
źródło
źródło
gsudo
. Bezpłatne sudo typu open-source dla systemu Windows, które pozwala na uruchamianie jako administrator z wiersza poleceń. Pojawi się wyskakujące okienko UAC.Odpowiedzi:
Jeśli bieżąca konsola nie jest podniesiona, a operacja, którą próbujesz wykonać, wymaga podniesionych uprawnień, możesz uruchomić PowerShell z Run as administratoropcją:
źródło
start-process -verb runAs "<cmd>" -argumentlist "<args1> <args2>"
;)Win
+X
Jak tu omówionoOto dodatek do sugestii Shay Levi (wystarczy dodać te wiersze na początku skryptu):
Powoduje to, że bieżący skrypt jest przekazywany do nowego procesu PowerShell w trybie administratora (jeśli bieżący użytkownik ma dostęp do trybu administratora, a skrypt nie jest uruchamiany jako administrator).
źródło
if (-not (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)))
if
oświadczenie i umieśćthrow
wewnątrz tego bloku.if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
[Security.Principal.WindowsBuiltInRole]::Administrator)
"Administrator"
Samopodnoszący się skrypt PowerShell
Windows 8.1 / PowerShell 4.0 +
Jedna linia :)
źródło
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" `"$args`"" -Verb RunAs; exit }
Benjamin Armstrong opublikował doskonały artykuł o samodoskonalących się skryptach PowerShell . Jest kilka drobnych problemów z jego kodem; zmodyfikowana wersja oparta na poprawkach sugerowanych w komentarzu znajduje się poniżej.
Zasadniczo pobiera tożsamość powiązaną z bieżącym procesem, sprawdza, czy jest administratorem, a jeśli nie jest, tworzy nowy proces PowerShell z uprawnieniami administratora i kończy stary proces.
źródło
$newProcess = new-object System.Diagnostics.ProcessStartInfo “cmd.exe” $newProcess.Arguments = ‘/c ‘ + [System.Environment]::GetCommandLineArgs() $newProcess.WorkingDirectory = [environment]::CurrentDirectory
Możesz utworzyć plik wsadowy (
*.bat
), który uruchamia skrypt PowerShell z uprawnieniami administratora po dwukrotnym kliknięciu. W ten sposób nie musisz nic zmieniać w skrypcie PowerShell. Aby to zrobić, utwórz plik wsadowy o tej samej nazwie i położeniu skryptu PowerShell, a następnie umieść w nim następującą treść:Otóż to!
Oto wyjaśnienie:
Zakładając, że skrypt PowerShell znajduje się na ścieżce
C:\Temp\ScriptTest.ps1
, plik wsadowy musi mieć ścieżkęC:\Temp\ScriptTest.bat
. Gdy ktoś uruchomi ten plik wsadowy, zostaną wykonane następujące kroki:Polecenie cmd wykona polecenie
Otworzy się nowa sesja PowerShell i zostanie wykonana następująca komenda:
W
system32
folderze otworzy się kolejna nowa sesja PowerShell z uprawnieniami administracyjnymi, do której zostaną przekazane następujące argumenty:Następujące polecenie zostanie wykonane z uprawnieniami administratora:
Gdy argumenty ścieżki i nazwy są podwójnie cytowane, mogą zawierać spacje lub znaki pojedynczego cudzysłowu (
'
).Bieżący folder zmieni się z
system32
naC:\Temp
i skryptScriptTest.ps1
zostanie wykonany. Po przekazaniu parametru-NoExit
okno nie zostanie zamknięte, nawet jeśli skrypt PowerShell zgłasza wyjątek.źródło
sudo
polecenia i konfigurując użytkownika używanego do automatycznego procesuNOPASSWD: ALL
wsudoers
pliku .Oto samopodnoszący się fragment dla skryptów Powershell, który zachowuje katalog roboczy :
Zachowanie katalogu roboczego jest ważne dla skryptów wykonujących operacje względne względem ścieżki. Prawie wszystkie inne odpowiedzi nie zachowują tej ścieżki, co może powodować nieoczekiwane błędy w pozostałej części skryptu.
Jeśli wolisz nie używać samowznoszącego się skryptu / fragmentu, a zamiast tego chcesz po prostu w łatwy sposób uruchomić skrypt jako administrator (np. Z menu kontekstowego Eksploratora), zobacz moją inną odpowiedź tutaj: https: // stackoverflow .pl / a / 57033941/2441655
źródło
Za pomocą
#Requires -RunAsAdministrator
jeszcze nie zostało powiedziane. Wydaje się, że istnieje tylko od wersji PowerShell 4.0.
http://technet.microsoft.com/en-us/library/hh847765.aspx
Wydaje mi się, że to dobry sposób, ale nie jestem jeszcze pewien doświadczenia w terenie. Środowiska wykonawcze PowerShell 3.0 prawdopodobnie ignorują to, lub nawet gorzej, powodują błąd.
Gdy skrypt jest uruchamiany jako użytkownik inny niż administrator, pojawia się następujący błąd:
źródło
Parameter RunAsAdministrator requires an argument
. @akauppi Nie jestem przekonany, że zawsze myślą.Możesz łatwo dodać niektóre wpisy rejestru, aby uzyskać menu kontekstowe „Uruchom jako administrator” dla
.ps1
plików:(zaktualizowany do prostszego skryptu z @Shay)
Zasadniczo w
HKCR:\Microsoft.PowershellScript.1\Shell\runas\command
ustaw wartość domyślną, aby wywołać skrypt za pomocą programu PowerShell.źródło
(default)
części?"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -noexit -command "& '%1'"
Kod opublikowany przez Jonathana i Shay Levy nie działał dla mnie.
Poniżej znajdziesz działający kod:
źródło
Musisz ponownie uruchomić skrypt z uprawnieniami administracyjnymi i sprawdzić, czy skrypt został uruchomiony w tym trybie. Poniżej napisałem skrypt, który ma dwie funkcje: DoElevatedOperations i DoStandardOperations . Powinieneś umieścić swój kod, który wymaga uprawnień administratora w pierwszym, a standardowe operacje w drugim. IsRunAsAdmin zmienna jest używana do określenia trybu administratora.
Mój kod to uproszczony wyciąg ze skryptu Microsoft, który jest generowany automatycznie podczas tworzenia pakietu aplikacji dla aplikacji ze Sklepu Windows.
źródło
Dodając moje 2 centy. Moja prosta wersja oparta na sesji sieciowej, która do tej pory działa w systemie Windows 7 / Windows 10. Po co to komplikować?
po prostu dodaj na górę skryptu, a uruchomi się on jako administrator.
źródło
if (!(net session 2>&1 | Out-Null)) { ...
@ycomp... } else { echo "your message" }
.cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
, Możesz ustawić tobypass
Alebypass
może być niebezpieczne. Ustaw naAllSigned
To zachowanie jest zgodne z projektem. Istnieje wiele warstw zabezpieczeń, ponieważ Microsoft naprawdę nie chciał, aby pliki .ps1 były najnowszymi wirusami pocztowymi. Niektórzy uważają, że jest to sprzeczne z samym pojęciem automatyzacji zadań, co jest sprawiedliwe. Model bezpieczeństwa Vista + ma na celu „zautomatyzowanie” rzeczy, dzięki czemu użytkownik jest w porządku.
Podejrzewam jednak, że jeśli sam uruchomisz PowerShell jako podniesiony, powinien on być w stanie uruchamiać pliki wsadowe bez żądania hasła, dopóki nie zamkniesz PowerShell.
źródło
Możesz również zmusić aplikację do otwarcia jako administrator, jeśli oczywiście masz konto administratora.
Znajdź plik, kliknij prawym przyciskiem myszy> właściwości> Skrót> Zaawansowane i sprawdź Uruchom jako administrator
Następnie kliknij OK.
źródło
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
jest miejscem, w którym znajduje się skrót PowerShell. On również nadal udaje się w inne miejsce, aby wywołać rzeczywiste „exe” (%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
).Ponieważ PowerShell jest oparty na profilu użytkownika, jeśli chodzi o uprawnienia; jeśli twoja nazwa użytkownika / profil ma uprawnienia do zrobienia czegoś, to pod tym profilem w PowerShell na ogół będziesz mógł to zrobić. Biorąc to pod uwagę, sensowne byłoby zmodyfikowanie skrótu znajdującego się pod Twoim profilem użytkownika, na przykład
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
.Kliknij prawym przyciskiem myszy i kliknij właściwości. Kliknij przycisk „Zaawansowane” pod zakładką „Skrót” znajdującą się tuż pod polem tekstowym „Komentarze” sąsiadującym z prawej strony dwóch innych przycisków, odpowiednio „Otwórz lokalizację pliku” i „Zmień ikonę”.
Zaznacz pole wyboru brzmi „Uruchom jako administrator”. Kliknij OK, a następnie Applyi OK. Ponownie kliknij prawym przyciskiem myszy ikonę „Windows PowerShell” znajdującą się w
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
i wybierz „Przypnij do menu Start / paska zadań”.Teraz za każdym razem, gdy klikniesz tę ikonę, wywoła ona UAC w celu eskalacji. Po wybraniu „TAK” zauważysz, że konsola PowerShell jest otwarta, a na górze ekranu będzie oznaczona etykietą „Administrator”.
Aby pójść o krok dalej ... możesz kliknąć prawym przyciskiem myszy ten sam skrót ikony w lokalizacji profilu Windows PowerShell i przypisać skrót klawiaturowy, który zrobi dokładnie to samo, jakbyś kliknął ostatnio dodaną ikonę. Więc tam, gdzie jest napisane „Klawisz skrótu”, wstaw kombinację klawiszy / przycisków, na przykład: Ctrl+ Alt+ P P(dla PowerShell) . Kliknij Applyi OK.
Teraz wystarczy nacisnąć przypisaną kombinację przycisków, a zobaczysz wywołanie UAC, a po wybraniu „TAK” zobaczysz konsolę PowerShell, a na pasku tytułu wyświetli się „Administrator”.
źródło
Znalazłem sposób, aby to zrobić ...
Utwórz plik wsadowy, aby otworzyć skrypt:
Następnie utwórz skrót, powiedz na pulpicie (kliknij prawym przyciskiem myszy Nowy -> Skrót ).
Następnie wklej to do lokalizacji:
Przy pierwszym otwarciu musisz raz wpisać hasło. Spowoduje to zapisanie go w menedżerze poświadczeń systemu Windows.
Po tym powinieneś być w stanie uruchomić się jako administrator bez konieczności wprowadzania nazwy użytkownika lub hasła administratora.
źródło
Problem z odpowiedziami @pgk i @Andrew Odri polega na tym, że masz parametry skryptu, zwłaszcza gdy są one obowiązkowe. Możesz rozwiązać ten problem, stosując następujące podejście:
Oto, jak wyglądałby kod, gdyby skrypt miał obowiązkowe parametry ComputerName i Port :
źródło
Wiele odpowiedzi tutaj jest blisko, ale trochę więcej pracy niż potrzeba.
Utwórz skrót do skryptu i skonfiguruj go do „Uruchom jako administrator”:
Properties...
Target
od<script-path>
dopowershell <script-path>
Run as administrator
źródło
Innym prostszym rozwiązaniem jest to, że możesz także kliknąć prawym przyciskiem myszy „C: \ Windows \ System32 \ cmd.exe” i wybrać „Uruchom jako administrator”, a następnie możesz uruchomić dowolną aplikację jako administrator bez podawania hasła.
źródło
Korzystam z rozwiązania poniżej. Obsługuje stdout / stderr poprzez funkcję transkrypcji i poprawnie przekazuje kod wyjścia do procesu nadrzędnego. Musisz dostosować ścieżkę / nazwę pliku transkrypcji.
źródło
Oto jak uruchomić podniesioną komendę PowerShell i zebrać jej formę wyjściową w pliku wsadowym Windows w jednym poleceniu (tj. Nie pisać skryptu PowerShell dla PS1).
Powyżej widać, że najpierw uruchamiam PowerShell z podwyższonym monitem, a następnie pytam, aby uruchomić inną PowerShell (podpowłoka), aby uruchomić polecenie.
źródło
Oprócz odpowiedzi Shay Levy, wykonaj poniższe ustawienia (tylko raz)
PATH
. Folder Windows \ System32Po instalacji:
powershell Start-Process powershell -Verb runAs <ps1_file>
Możesz teraz uruchomić wszystko w jednym wierszu poleceń. Powyższe działa w systemie Windows 8 Basic w wersji 64-bitowej.
źródło
Najbardziej niezawodny sposób, jaki znalazłem, to zawinięcie go w samopodnoszący się plik .bat:
.Bat sprawdza, czy jesteś już administratorem i w razie potrzeby ponownie uruchamia skrypt jako Administrator. Zapobiega również otwieraniu zewnętrznych okien „cmd” przy czwartym parametrze
ShellExecute()
ustawionym na0
.źródło
EXIT
na aGOTO :EOF
i usunąłem drugi. Ponadto,cd %~dp0
należy umieścićcd /d %~dp0
ORAZ pierwszą komendę po@echo off
. W ten sposób nie potrzebujesz bezwzględnej ścieżki.ps1
żadnej z nich, po prostu umieść ją w tym samym folderze, co.bat
. Jeśli chcesz zobaczyć wynik, zmień 4. parametr na1
.mshta
polecenie?cmd
procesu wywoływania , więc nie jest to „naprawianie”, ale cieszę się, że mogłeś go zmodyfikować zgodnie z własnymi potrzebami.cmd
(ja nie). Ale jeśli chodzi o inne zmiany, myślę, że są to poprawki, ponieważ moja wersja działałaby dla nas obojga, a twoja nie dla mnie, tj. Moja jest bardziej ogólna (omów scenariusz różnych dysków). W każdym razie bardzo sprytne podejście.Nie widziałem wcześniej swojego sposobu, więc wypróbuj to. Jest o wiele łatwiejszy do naśladowania i ma znacznie mniejszą powierzchnię:
Bardzo prosto, jeśli bieżąca sesja PowerShell została wywołana z uprawnieniami administratora, dobrze znany identyfikator SID grupy administratorów pojawi się w grupach, gdy pobierzesz bieżącą tożsamość. Nawet jeśli konto należy do tej grupy, identyfikator SID nie pojawi się, chyba że proces został wywołany z podwyższonymi referencjami.
Prawie wszystkie te odpowiedzi są odmianą niezwykle popularnej metody Bena Armstronga Microsoftu, w jaki sposób to osiągnąć, nie tak naprawdę pojmując, co faktycznie robi i jak inaczej naśladować tę samą procedurę.
źródło
Aby dołączyć wynik polecenia do pliku tekstowego zawierającego bieżącą datę, możesz zrobić coś takiego:
źródło
To jest wyjaśnienie ...
Poświadczenie PowerShell RUNAS / SAVECRED „nie jest bezpieczny”, wypróbował go i dodaje tożsamość administratora oraz hasło do pamięci podręcznej poświadczeń i może być używany w innym miejscu OOPS !. Jeśli to zrobiłeś, sugeruję sprawdzenie i usunięcie wpisu.
Przejrzyj swój program lub kod, ponieważ zgodnie z zasadą Microsoft nie można mieszać kodu użytkownika i administratora w tym samym obiekcie blob bez UAC (punktu wejścia), aby uruchomić program jako administrator. To byłoby sudo (to samo) w systemie Linux.
UAC ma 3 typy, nie patrz, monit lub punkt wejścia wygenerowany w manifeście programu. Nie podnosi poziomu programu, więc jeśli nie ma UAC i potrzebuje administratora, zakończy się niepowodzeniem. Kontrola konta użytkownika, choć jako wymóg administratora, jest dobra, zapobiega wykonywaniu kodu bez uwierzytelnienia i zapobiega wykonaniu scenariusza z mieszanymi kodami na poziomie użytkownika.
źródło
Okazuje się, że było to zbyt łatwe. Wszystko, co musisz zrobić, to uruchomić cmd jako administrator. Następnie wpisz
explorer.exe
i naciśnij klawisz Enter. To otwiera Eksploratora Windows . Teraz kliknij prawym przyciskiem myszy skrypt PowerShell, który chcesz uruchomić, wybierz „uruchom z PowerShell”, który uruchomi go w PowerShell w trybie administratora.Może pojawić się prośba o włączenie zasad do uruchomienia, wpisz Y i wciśnij Enter. Teraz skrypt będzie działał w PowerShell jako administrator. W przypadku, gdy świeci na czerwono, oznacza to, że Twoje zasady jeszcze nie wpłynęły. Następnie spróbuj ponownie i powinno działać dobrze.
źródło