Chcę napisać skrypt, który pobiera dane od użytkowników, a następnie wprowadza zmiany w całym systemie. Potrzebuję, aby było to bardzo ogólne, ale po prostu, u góry, muszę to sprawdzić, aby sprawdzić, czy jest uruchamiane jako „Administrator”. Jeśli tak nie jest, chcę wyświetlić komunikat, który im to powie; jeśli tak, to chcę, żeby trwało dalej. Czy istnieje stały sposób na sprawdzenie tego? Nie chcę zaczynać nowej sesji jako Administrator, chcę tylko sprawdzić, czy jest ona obecnie uruchomiona jako administrator
windows
command-line
Kanadyjczyk Luke
źródło
źródło
Odpowiedzi:
Znaleziono to na Przepełnienie stosu :
źródło
net session >nul 2>&1 && echo Success || echo Failure
. Uważam, że ta kompaktowa składnia jest wygodniejsza.To sprawdza wysoki poziom integralności. (działa w systemie Windows Vista i nowszych)
źródło
whoami
na XP.Wiele, wiele odpowiedzi na to i wiele innych pytań w SE ( 1 , 2 , 3, żeby wymienić tylko kilka), z których wszystkie są w ten czy inny sposób wadliwe, wyraźnie pokazały, że Windows nie zapewnia niezawodnego wbudowanego narzędzia . Czas więc wprowadzić własną wersję.
Bez dalszych brudnych hacków:
Skompiluj następujący program (instrukcje poniżej) lub uzyskaj wstępnie skompilowaną kopię . Tę czynność należy wykonać tylko raz, a następnie można skopiować
.exe
wszystko (np. Wraz z pakietem Sysinternals ).Kod działa w Win2k + 1 , zarówno z UAC, jak i bez UAC, domeny, grup przechodnich, cokolwiek - ponieważ używa tego samego sposobu co sam system podczas sprawdzania uprawnień.
chkadmin
wypisuje „Admin” lub „Non-admin” i ustawia kod wyjścia odpowiednio na 0 lub 1. Wyjście można stłumić/q
przełącznikiem.chkadmin.c
:Aby skompilować, uruchom w wierszu polecenia zestawu Windows SDK:
(w przypadku korzystania z VS2012 + potrzebne są dodatkowe korekty, jeśli trzeba kierować reklamy na 2k / XP )
Metoda została udostępniona dzięki https://stackoverflow.com/questions/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908
1 MSDN twierdzi, że interfejsy API to XP +, ale to nieprawda.
CheckTokenMembership
wynosi 2k +, a drugi jest jeszcze starszy .źródło
Najczystszym sposobem sprawdzenia uprawnień administratora za pomocą skryptu CMD, który znalazłem, jest mniej więcej taki:
Ta metoda używa tylko wbudowanych plików CMD.exe, więc powinna być bardzo szybka. Sprawdza również rzeczywiste możliwości procesu, zamiast sprawdzania identyfikatorów SID lub członkostwa w grupach, dlatego testowane jest skuteczne uprawnienie. I działa to już w Windows 2003 i XP. Normalne procesy użytkownika lub procesy nieokreślone zawodzą sondę katalogu, w przypadku której powiodły się procesy administracyjne lub podwyższone.
Ten test kończy się niepowodzeniem, jeśli grupa
Everyone
,BUILTIN\Users
lub inna podobna grupa otrzyma uprawnienia do odczytu do profilu systemowego. To prawda, że jest to niestandardowa konfiguracja inna niż na komputerach skonfigurowanych jako kontrolery domeny Windows, które dają uprawnienia „NT AUTHORITY \ Authentified Users” do odczytu / wykonania pliku systemowego.źródło
verify
. Zwykle używamcd .
(kropka spacji cd), która ustawia poziom błędu na 0, nie wytwarza danych wyjściowych, a także jest przydatna do tworzenia pliku o zerowej długości za pośrednictwemcd . >somefile
. To powiedziawszy, przetestowałem „dir” na Windows 2000, XP, Vista, 2003, 2008, 2012, 7, 8 i 10. Dla wszystkich tych „dir” wyczyści poziom błędu na 0, jeśli został ustawiony przed „reż”. Dlatego nie jestem pewien, dlaczego William użył „weryfikacji” do pierwszego wyczyszczenia poziomu błędu.