Skrypt wsadowy: jak sprawdzić prawa administratora
Jak sprawdzić, czy bieżący skrypt wsadowy ma uprawnienia administratora?
Wiem jak zrobić to samo z runami, ale nie jak sprawdzić prawa admina. Jedyne rozwiązania, które widziałem, to prymitywne roboty hakerskie lub korzystanie z zewnętrznych programów. Cóż, właściwie nie obchodzi mnie, czy jest to praca hack, o ile działa na Windows XP i nowszych.
26 answers
Problemy
Blak3r / rozwiązanie Rushyo działa dobrze we wszystkim oprócz Windows 8. Uruchamianie AT
w systemie Windows 8 skutkuje:
The AT command has been deprecated. Please use schtasks.exe instead.
The request is not supported.
(patrz screenshot #1) i powróci %errorLevel%
1
.
Badania
Więc poszedłem szukać innych poleceń, które wymagają podwyższonych uprawnień. rationallyparanoid.com miałem listę kilku, więc uruchomiłem każde polecenie na dwóch przeciwstawnych skrajnościach obecnego systemu Windows OSs (XP i 8) w nadziei na znalezienie polecenia, które nie będzie miało dostępu do obu systemów operacyjnych, gdy będą uruchamiane ze standardowymi uprawnieniami.
W końcu znalazłem jeden - NET SESSION
. A true , czyste, uniwersalne rozwiązanie, które nie obejmuje:
- W 2007 roku firma została założona przez Johna F. Kennedy ' ego.]}
- analiza danych zwracanych z
FOR
pętli - wyszukiwanie ciągów dla "Administrator"
- używając
AT
(Windows 8 niezgodny) lubWHOAMI
(Windows XP niezgodny).
Testowanie
Niezależnie potwierdziłem, że to działa na:
- Windows XP, x86
- Windows XP, x64
- Windows Vista, x86
- Windows Vista, x64
- Windows 7, x86
- Windows 7, x64
- Windows 8, x86
- Windows 8, x64
(zobacz zrzut ekranu #2)
Implementacja / Użycie
Więc, aby użyć tego rozwiązania, po prostu zrób coś takiego: {]}
@echo off
goto check_Permissions
:check_Permissions
echo Administrative permissions required. Detecting permissions...
net session >nul 2>&1
if %errorLevel% == 0 (
echo Success: Administrative permissions confirmed.
) else (
echo Failure: Current permissions inadequate.
)
pause >nul
Dostępne tutaj, jeśli jesteś leniwy: https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat
Wyjaśnienie
NET SESSION
jest standardowym poleceniem używanym do " zarządzania połączeniami z komputerem serwera. Używany bez parametrów, [it] wyświetla informacje o wszystkich sesjach z lokalnym komputer."
-
@echo off
- Wyłącz wyświetlanie poleceń
-
goto check_Permissions
- przejdź do
:check_Permissions
bloku kodu
- przejdź do
-
net session >nul 2>&1
- Uruchom polecenie
- Ukryj wizualne wyjście polecenia przez
- przekierowanie standardowego wyjścia (numeryczny Uchwyt 1 /
STDOUT
) strumienia nanul
- przekierowanie standardowego strumienia wyjściowego błędu (numeryczny uchwyt 2 /
STDERR
) do tego samego miejsca przeznaczenia co numeryczny Uchwyt 1
- przekierowanie standardowego wyjścia (numeryczny Uchwyt 1 /
-
if %errorLevel% == 0
- jeśli wartość kodu wyjścia (
%errorLevel%
) na0
oznacza to, że nie wystąpiły żadne błędy i dlatego natychmiastowe poprzednie polecenie uruchomiło pomyślnie
- jeśli wartość kodu wyjścia (
-
else
- jeśli wartość kodu wyjścia (
%errorLevel%
) nie jest0
oznacza to, że błędy mają wystÄ ... piĹ 'o i dlatego natychmiastowe poprzednie polecenie uruchomiĺ' o bezskutecznie
- jeśli wartość kodu wyjścia (
- Kod pomiędzy odpowiednim nawiasem będzie wykonywany w zależności od spełnionych kryteriów
Screeny
NET SESSION
na Windows XP x86-Windows 8 x64 :
Dziękuję, @ Tilka, za zmianę twoja zaakceptowana odpowiedź wobec mojej. :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:41
Rozwiązanie Andersa zadziałało u mnie, ale nie byłem pewien, jak je odwrócić ,aby było odwrotnie (gdy nie byłeś adminem).
Oto moje rozwiązanie. Ma dwa przypadki przypadku IF I ELSE, a niektóre sztuki ascii, aby upewnić się, że ludzie rzeczywiście go przeczytać. :)Wersja Minimalna
Rushyo zamieścił To rozwiązanie tutaj: Jak wykryć, czy CMD działa jako Administrator/ma podwyższone uprawnienia?
NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
ECHO Administrator PRIVILEGES Detected!
) ELSE (
ECHO NOT AN ADMIN!
)
Wersja, która dodaje Komunikaty o błędach, Pauzy i Wyjścia
@rem ----[ This code block detects if the script is being running with admin PRIVILEGES If it isn't it pauses and then quits]-------
echo OFF
NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
ECHO Administrator PRIVILEGES Detected!
) ELSE (
echo ######## ######## ######## ####### ########
echo ## ## ## ## ## ## ## ## ##
echo ## ## ## ## ## ## ## ## ##
echo ###### ######## ######## ## ## ########
echo ## ## ## ## ## ## ## ## ##
echo ## ## ## ## ## ## ## ## ##
echo ######## ## ## ## ## ####### ## ##
echo.
echo.
echo ####### ERROR: ADMINISTRATOR PRIVILEGES REQUIRED #########
echo This script must be run as administrator to work properly!
echo If you're seeing this after clicking on a start menu icon, then right click on the shortcut and select "Run As Administrator".
echo ##########################################################
echo.
PAUSE
EXIT /B 1
)
@echo ON
Działa na WinXP -- > Win8 (w tym wersje 32/64 bitowe).
Edycja: 28/08/2012 zaktualizowano, aby obsługiwać system Windows 8. @BenHooper zwrócił na to uwagę w Odpowiedzi poniżej. Proszę głosuj na jego odpowiedź.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:48
Więcej zagadnień
Jak zauważył @Lectrode, jeśli spróbujesz uruchomić polecenie net session
podczas zatrzymania usługi serwera, otrzymasz następujący komunikat o błędzie:
The Server service is not started.
More help is available by typing NET HELPMSG 2114
W tym przypadku zmienna %errorLevel%
zostanie ustawiona na 2
.
Uwaga usługa serwera nie jest uruchamiana w Trybie Awaryjnym(z siecią lub bez).
Szukam alternatywy
Coś, co:
- można uruchomić po wyjęciu z pudełka na Windows XP i later (32 i 64 bit); Nie dotyczy rejestru ani żadnego pliku/folderu systemowego;]}
- działa niezależnie od lokalizacji systemu;
- daje prawidłowe wyniki nawet w trybie awaryjnym.
Uruchomiłem więc waniliową maszynę wirtualną Windows XP i zacząłem przewijać listę aplikacji w folderze C:\Windows\System32
, próbując zdobyć kilka pomysłów. Po próbach i błędach, to jest dirty (kalambur) podejście, które wymyśliłem:
fsutil dirty query %systemdrive% >nul
The fsutil dirty
polecenie wymaga uprawnień administratora do uruchomienia, w przeciwnym razie nie powiedzie się. %systemdrive%
jest zmienną środowiskową , która zwraca literę dysku, na którym zainstalowany jest system operacyjny. Wyjście jest przekierowywane do nul
, a więc ignorowane. Zmienna %errorlevel%
zostanie ustawiona na 0
dopiero po pomyślnym wykonaniu.
Oto, co mówi dokumentacja:
Fsutil dirty
Zapytuje lub ustawia brudny bit woluminu. Gdy ustawiony jest brudny bit woluminu, autochk automatycznie sprawdza głośność pod kątem błędów przy następnym ponownym uruchomieniu komputera.
Składnia
fsutil dirty {query | set} <VolumePath>
Parametry
query Queries the specified volume's dirty bit. set Sets the specified volume's dirty bit. <VolumePath> Specifies the drive name followed by a colon or GUID.
Uwagi
Brudny bit woluminu wskazuje, że system plików może być w niespójnym stanie. Dirty bit można ustawić, ponieważ:
- Tom jest online i ma wyjątkowe zmiany.
- wprowadzono zmiany w woluminie i komputer został wyłączony przed zmiany zostały wprowadzone na dysku.
- wykryto korupcję na głośniku.
Jeśli dirty bit jest ustawiony przy ponownym uruchomieniu komputera, chkdsk uruchamia się, aby zweryfikować integralność systemu plików i spróbować naprawić wszelkie problemy z woluminem.
Przykłady
Aby odpytywać brudny bit na dysku C, wpisz:
fsutil dirty query C:
Dalsze badania
O ile powyższe rozwiązanie działa od Windows XP, warto dodać, że Windows 2000 i Windows PE (preinstalowane środowisko) nie są dostarczane z fsutil.exe
, więc musimy uciekać się do czegoś innego.
Podczas moich poprzednich testów zauważyłem, że uruchomienie komendy sfc
bez żadnych parametrów skutkowałoby albo:
- Jeśli nie masz wystarczająco dużo uprawnień, to nie jest to błąd.]}
- lista dostępnych parametrów i ich wykorzystanie.
Czyli: brak parametrów, brak strony . Chodzi o to, że możemy przeanalizować wyjście i sprawdzić, czy mamy wszystko oprócz błędu:
sfc 2>&1 | find /i "/SCANNOW" >nul
Wyjście błędu jest najpierw przekierowywane na standardowe wyjście, które następnie jest przesyłane do polecenia find
. W tym momencie musimy szukać tylko parametru, który jest obsługiwany we wszystkich wersjach systemu Windows od Windows 2000: /SCANNOW
. Wyszukiwanie jest niewrażliwe na wielkość liter, A wyjście jest odrzucane przez przekierowanie do nul
.
Oto fragment dokumentacji:
Sfc
Skanuje i weryfikuje integralność wszystkich chronionych plików systemowych i zastępuje nieprawidłowe wersje poprawnymi wersjami.
Uwagi
Aby uruchomić musisz być zalogowany jako członek grupy Administrators sfc.exe .
Przykładowe Użycie
Oto kilka przykładów wklejania i uruchamiania:
Windows XP i nowsze
@echo off
call :isAdmin
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Error: Access denied.
)
pause >nul
exit /b
:isAdmin
fsutil dirty query %systemdrive% >nul
exit /b
Windows 2000 / Windows PE
@echo off
call :isAdmin
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Error: Access denied.
)
pause >nul
exit /b
:isAdmin
sfc 2>&1 | find /i "/SCANNOW" >nul
exit /b
Dotyczy
- okna 2000
- Windows XP
- Windows Vista
- Windows 7
- Windows 8
- Windows 8.1
---
- okna PE
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-22 23:11:23
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"&&(
echo admin...
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-29 18:51:52
One more way
fltmc >nul 2>&1 && (
echo has admin permissions
) || (
echo has NOT admin permissions
)
fltmc
Polecenie jest dostępne na każdym systemie windows od XP, więc powinno być dość przenośne.
Jeszcze jedno rozwiązanie przetestowane na XP
,8.1
,7
(niestety nie działa na wszystkich maszynach win10
- Zobacz komentarze.)- istnieje jedna konkretna zmienna =::
, która jest prezentowana tylko wtedy, gdy sesja konsoli nie ma admina privileges.As nie jest tak łatwo stworzyć zmienną, która zawiera =
w swojej nazwie jest to stosunkowo niezawodny sposób sprawdzenia dla uprawnień administratora (i dość szybko, ponieważ nie wywołuje zewnętrznych plików wykonywalnych)
setlocal enableDelayedExpansion
set "dv==::"
if defined !dv! (
echo has NOT admin permissions
) else (
echo has admin permissions
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-19 16:34:18
Alternatywne rozwiązanie:
@echo off
pushd %SystemRoot%
openfiles.exe 1>nul 2>&1
if not %errorlevel% equ 0 (
Echo here you are not administrator!
) else (
Echo here you are administrator!
)
popd
Pause
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-17 18:43:58
Nie tylko sprawdzać, ale automatycznie uzyskiwać uprawnienia administratora
aka Automatic UAC for Win 7/8/8. 1 ff.: poniższy fragment jest naprawdę fajny z jeszcze jedną funkcją: ten fragment wsadowy nie tylko sprawdza prawa administratora, ale pobiera je automatycznie! (i testy przed, jeśli mieszka na UAC zdolny OS.)
Dzięki tej sztuczce nie musisz dłużej klikać prawym przyciskiem myszy na pliku wsadowym "z uprawnieniami administratora". Jeśli zapomniałeś, aby rozpocząć go z podwyższonymi prawami, UAC pojawia się automatycznie! Co więcej, na początku jest testowany, jeśli OS potrzebuje / dostarcza UAC, więc zachowuje się poprawnie np. dla Win 2000/XP aż do Win 8.1-testowany.
@echo off
REM Quick test for Windows generation: UAC aware or not ; all OS before NT4 ignored for simplicity
SET NewOSWith_UAC=YES
VER | FINDSTR /IL "5." > NUL
IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO
VER | FINDSTR /IL "4." > NUL
IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO
REM Test if Admin
CALL NET SESSION >nul 2>&1
IF NOT %ERRORLEVEL% == 0 (
if /i "%NewOSWith_UAC%"=="YES" (
rem Start batch again with UAC
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
)
rem Program will now start again automatically with admin rights!
rem pause
goto :eof
)
Fragment łączy kilka dobrych wzorców wsadowych, zwłaszcza (1) Test admina w tym wątku przez Bena Hoopera i (2) aktywacja UAC przeczytana na BatchGotAdmin i cytowana na stronie wsadowej przez robvanderwoude (respect). (3) dla identyfikatora OS przez "wzór ver / FINDSTR" po prostu nie znajduję odniesienia.)
(dotyczy niektóre bardzo drobne ograniczenia, gdy "NET SESSION" nie działa, jak wspomniano w innej odpowiedzi - możesz wstawić inne z tych poleceń. Dla mnie działa w trybie awaryjnym Windows lub specjalnych standardowych usług w dół i takie nie są ważnymi przypadkami użycia-dla niektórych administratorów może są.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-30 16:21:57
Mam dwa sposoby sprawdzania uprzywilejowanego dostępu, oba są dość niezawodne i bardzo przenośne w prawie każdej wersji systemu windows.
1. Metoda
set guid=%random%%random%-%random%-%random%-%random%-%random%%random%%random%
mkdir %WINDIR%\%guid%>nul 2>&1
rmdir %WINDIR%\%guid%>nul 2>&1
IF %ERRORLEVEL%==0 (
ECHO PRIVILEGED!
) ELSE (
ECHO NOT PRIVILEGED!
)
Jest to jedna z najbardziej niezawodnych metod, ze względu na swoją prostotę, a zachowanie tego bardzo prymitywnego polecenia jest mało prawdopodobne. Tak nie jest w przypadku innych wbudowanych narzędzi CLI, takich jak net session, które można wyłączyć za pomocą zasad admin/network policies lub poleceń, takich jak fsutils to zmieniło wyjście w systemie Windows 10.
* Działa na XP i nowszych
2. Metoda
REG ADD HKLM /F>nul 2>&1
IF %ERRORLEVEL%==0 (
ECHO PRIVILEGED!
) ELSE (
ECHO NOT PRIVILEGED!
)
Czasami nie podoba Ci się pomysł dotknięcia dysku użytkownika, nawet jeśli jest on tak nieszkodliwy jak używanie fsutils lub tworzenie pustego folderu, jest to nie do udowodnienia, ale może spowodować katastrofalną porażkę, jeśli coś pójdzie nie tak. W tym scenariuszu możesz po prostu sprawdzić rejestr pod kątem uprawnień.
W tym celu możesz spróbować utworzyć klucz na HKEY_LOCAL_MACHINE używając domyślnych uprawnień otrzymasz Access Denied i
ERRORLEVEL == 1
, ale jeśli uruchomisz się jako administrator, wyświetli "command executed successfully" iERRORLEVEL == 0
. Ponieważ klucz już istnieje, nie ma to wpływu na rejestr. Jest to prawdopodobnie najszybszy sposób, a REG jest tam przez długi czas.* nie jest dostępny na Pre NT (Win 9x).
* Działa na XP i później
Przykład pracy
Skrypt czyszczący folder temp
@echo off
:main
echo.
echo. Clear Temp Files script
echo.
call :requirePrivilegies
rem Do something that require privilegies
echo.
del %temp%\*.*
echo. End!
pause>nul
goto :eof
:requirePrivilegies
set guid=%random%%random%-%random%-%random%-%random%-%random%%random%%random%
mkdir %WINDIR%\%guid%>nul 2>&1
rmdir %WINDIR%\%guid%>nul 2>&1
IF NOT %ERRORLEVEL%==0 (
echo ########## ERROR: ADMINISTRATOR PRIVILEGES REQUIRED ###########
echo # This script must be run as administrator to work properly! #
echo # Right click on the script and select "Run As Administrator" #
echo ###############################################################
pause>nul
exit
)
goto :eof
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 02:32:15
Poniżej próbuje utworzyć plik w katalogu Windows. Jeśli się powiedzie, usunie go.
copy /b/y NUL %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
if errorlevel 1 goto:nonadmin
del %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
:admin
rem here you are administrator
goto:eof
:nonadmin
rem here you are not administrator
goto:eof
Zauważ, że 06CF2EB6-94e6-4a60-91D8-AB945AE8CF38 jest identyfikatorem GUID, który został wygenerowany dzisiaj i zakłada się, że konflikt z istniejącą nazwą pliku jest niemożliwy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-14 08:00:37
Najczystszym sposobem sprawdzenia uprawnień administratora za pomocą skryptu CMD, który znalazłem, jest coś takiego:
@echo off
REM Calling verify with no args just checks the verify flag,
REM we use this for its side effect of setting errorlevel to zero
verify >nul
REM Attempt to read a particular system directory - the DIR
REM command will fail with a nonzero errorlevel if the directory is
REM unreadable by the current process. The DACL on the
REM c:\windows\system32\config\systemprofile directory, by default,
REM only permits SYSTEM and Administrators.
dir %windir%\system32\config\systemprofile >nul 2>nul
REM Use IF ERRORLEVEL or %errorlevel% to check the result
if not errorlevel 1 echo has Admin privs
if errorlevel 1 echo has only User privs
Ta metoda używa tylko CMD.exe zbudowany, więc powinno być bardzo szybko. Sprawdza również rzeczywiste możliwości procesu, a nie sprawdzanie Sid lub członkostwa w grupach, więc pozwolenie effective jest testowane. I to działa tak daleko wstecz, jak Windows 2003 i XP. Normalne procesy użytkownika lub procesy nieelementowane nie sprawdzają katalogu, gdzie jako Admin lub podwyższone procesy udane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-07 19:23:24
Whoami / grupy nie działają w jednym przypadku. Jeśli masz UAC całkowicie wyłączony (nie tylko powiadomienie wyłączone), i zacząłeś od monitu administratora, a następnie wydałeś:
runas /trustlevel:0x20000 cmd
Będziesz biegał bezwypadkowo, ale wystawiasz:
whoami /groups
/ Align = "left" / To jest złe. Oto dlaczego jest źle:
Podczas uruchamiania w tym stanie, if IsUserAdmin ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389 (v=vs.85). aspx ) zwraca FALSE i UAC jest w pełni wyłączony, a GetTokenInformation zwraca TokenElevationTypeDefault (http://blogs.msdn.com/b/cjacks/archive/2006/10/24/modifying-the-mandatory-integrity-level-for-a-securable-object-in-windows-vista.aspx) wtedy proces jest nie uruchomiony, ale whoami /groups
twierdzi, że tak.
Naprawdę, najlepszym sposobem, aby to zrobić z pliku wsadowego jest:
net session >nul 2>nul
net session >nul 2>nul
echo %errorlevel%
Powinieneś zrobić net session
dwa razy, ponieważ jeśli ktoś zrobił at
przed ręką, dostaniesz zły informacje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 17:24:31
whoami /groups | find "S-1-16-12288" > nul
if not errorlevel 1 (
echo ... connected as admin
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-15 18:56:56
Niektóre serwery wyłączają usługi, których wymaga polecenie "net session". Powoduje to, że kontrola administratora zawsze mówi, że nie masz praw administratora, gdy możesz mieć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-14 07:37:01
Edit: copyitright wskazał, że jest to zawodne. Zatwierdzenie dostępu do odczytu za pomocą UAC pozwoli dir odnieść sukces. Mam trochę więcej skryptów, aby zaoferować inną możliwość, ale nie jest to tylko do odczytu.
reg query "HKLM\SOFTWARE\Foo" >NUL 2>NUL && goto :error_key_exists
reg add "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_not_admin
reg delete "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_failed_delete
goto :success
:error_failed_delete
echo Error unable to delete test key
exit /b 3
:error_key_exists
echo Error test key exists
exit /b 2
:error_not_admin
echo Not admin
exit /b 1
:success
echo Am admin
Stara odpowiedź poniżej
Warning: unreliable
Na podstawie wielu innych dobrych odpowiedzi tutaj i punktów podniesionych przez and31415 stwierdziłem, że jestem fanem następujących:
dir "%SystemRoot%\System32\config\DRIVERS" 2>nul >nul || echo Not Admin
Kilka zależności i szybko.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-17 22:27:42
Uwaga: Sprawdzanie za pomocą CaCl dla \system32 \ config \ system zawsze zawiedzie w WOW64, (na przykład z % systemroot%\syslow64 \ cmd.exe / 32 bit Total Commander) więc Skrypty uruchamiane w 32-bitowej powłoce w 64-bitowym systemie będą zapętlane na zawsze... Lepiej byłoby sprawdzić prawa w katalogu Prefetch:
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\Prefetch\"
Win XP do 7 testowany, jednak nie działa w WinPE jak w instalacji windows 7.wim nie ma takiego dir ani cacls.exe
Również w winPE i wow64 nie sprawdza się z openfiles.exe :
OPENFILES > nul
W Windows 7 będzie errorlevel z "1" z informacją, że "docelowy system musi być 32-bitowy system operacyjny"
Oba sprawdzania prawdopodobnie nie powiodą się również w Konsoli odzyskiwania.
Co działa w Windows XP - 8 32/64 bit, w WOW64 i w WinPE to: testy tworzenia dir (jeśli admin nie miał uprawnień dla wszystkich)...) i
net session
I
reg add HKLM /F
Kontrole.
Jeszcze jedna uwaga w niektórych windows XP (i innych wersje prawdopodobnie też, w zależności od majsterkowania admina) w zależności od wpisów rejestru bezpośrednio wywołujących bat / cmd z .skrypt vbs zawiedzie z informacją, że pliki bat / cmd nie są z niczym powiązane...
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo
Wzywam cmd.exe z parametrem pliku bat / cmd z drugiej strony Działa OK:
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/C %~s0", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-02 16:17:08
Dosłownie dziesiątki odpowiedzi w tym i powiązanych pytaniach oraz w innych miejscach w SE, z których wszystkie są wadliwe w ten czy inny sposób, wyraźnie pokazały, że Windows nie zapewnia niezawodnego wbudowanego narzędzia konsolowego. Więc, nadszedł czas, aby rozwinąć swoje własne.
Następujący kod C, oparty na wykrywa, czy program działa z pełnymi prawami administratora , Działa w Win2k+1, wszędzie i we wszystkich przypadkach (UAC, domeny, grupy przechodnie...)- bo robi to samo co sam system, gdy sprawdza uprawnienia. Sygnalizuje wynik zarówno komunikatem (który można wyciszyć przełącznikiem), jak i kodem wyjścia.
Musi być skompilowany tylko raz, wtedy możesz po prostu skopiować .exe
wszędzie-zależy to tylko od kernel32.dll
i advapi32.dll
(ja załadowałem kopię ).
chkadmin.c
:
#include <malloc.h>
#include <stdio.h>
#include <windows.h>
#pragma comment (lib,"Advapi32.lib")
int main(int argc, char** argv) {
BOOL quiet = FALSE;
DWORD cbSid = SECURITY_MAX_SID_SIZE;
PSID pSid = _alloca(cbSid);
BOOL isAdmin;
if (argc > 1) {
if (!strcmp(argv[1],"/q")) quiet=TRUE;
else if (!strcmp(argv[1],"/?")) {fprintf(stderr,"Usage: %s [/q]\n",argv[0]);return 0;}
}
if (!CreateWellKnownSid(WinBuiltinAdministratorsSid,NULL,pSid,&cbSid)) {
fprintf(stderr,"CreateWellKnownSid: error %d\n",GetLastError());exit(-1);}
if (!CheckTokenMembership(NULL,pSid,&isAdmin)) {
fprintf(stderr,"CheckTokenMembership: error %d\n",GetLastError());exit(-1);}
if (!quiet) puts(isAdmin ? "Admin" : "Non-admin");
return !isAdmin;
}
1MSDN twierdzi, że API to XP+ , ale jest to fałszywe. CheckTokenMembership
jest 2k + , a drugi jest jeszcze starszy. Na last link zawiera również znacznie bardziej skomplikowany sposób, który mógłby działać nawet w NT.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:26
PowerShell ktokolwiek?
param (
[string]$Role = "Administrators"
)
#check for local role
$identity = New-Object Security.Principal.WindowsIdentity($env:UserName)
$principal = New-Object Security.Principal.WindowsPrincipal($identity)
Write-Host "IsInRole('$Role'): " $principal.IsInRole($Role)
#enumerate AD roles and lookup
$groups = $identity::GetCurrent().Groups
foreach ($group in $groups) {
$trans = $group.Translate([Security.Principal.NTAccount]);
if ($trans.Value -eq $Role) {
Write-Host "User is in '$Role' role"
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-26 14:40:42
Oto kolejny do dodania do listy; -)
(próba utworzenia pliku w lokalizacji systemowej)
CD.>"%SystemRoot%\System32\Drivers\etc\_"
MODE CON COLS=80 LINES=25
IF EXIST "%SystemRoot%\System32\Drivers\etc\_" (
DEL "%SystemRoot%\System32\Drivers\etc\_"
ECHO Has Admin privileges
) ELSE (
ECHO No Admin privileges
)
MODE CON
ponownie uruchamia ekran i przewyższa wszelkie teksty / błędy, gdy nie ma uprawnień do zapisu do lokalizacji systemowej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-23 03:29:09
Alternatywa: użyj zewnętrznego narzędzia, które jest przeznaczone do tego celu, np. IsAdmin.exe (nieograniczone freeware).
Kody wyjścia:
0-bieżący użytkownik nie będący członkiem grupy Administrators
1-Aktualny użytkownik wśród administratorów i uruchomiony
2-Aktualny użytkownik należący do administratorów, ale nie uruchomiony
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-17 18:31:56
@echo off
ver
set ADMDIR=C:\Users\Administrator
dir %ADMDIR% 1>nul 2>&1
echo [%errorlevel%] %ADMDIR%
if "%errorlevel%"=="0" goto main
:: further checks e.g. try to list the contents of admin folders
:: wherever they are stored on older versions of Windows
echo You need administrator privileges to run this script: %0
echo Exiting...
exit /b
:main
echo Executing with Administrator privileges...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-29 22:11:59
@echo off
:start
set randname=%random%%random%%random%%random%%random%
md \windows\%randname% 2>nul
if %errorlevel%==0 (echo You're elevated!!!
goto end)
if %errorlevel%==1 (echo You're not elevated :(:(
goto end)
goto start
:end
rd \windows\%randname% 2>nul
pause >nul
Wyjaśnię kod linia po linii:
@echo off
Użytkownicy będą zirytowani wieloma więcej niż 1 liniami bez tego.
:start
Wskaż gdzie zaczyna się program.
set randname=%random%%random%%random%%random%%random%
Ustaw nazwę pliku katalogu, który ma zostać utworzony.
md \windows\%randname% 2>nul
Tworzy katalog na <DL>:\Windows
(zastąp
- literą dysku).
if %errorlevel%==0 (echo You're elevated!!!
goto end)
Jeśli zmienna środowiskowa ERRORLEVEL jest równa zeru, to wyświetla komunikat o sukcesie.
Idź do końca (nie kontynuuj żadnych dalej).
if %errorlevel%==1 (echo You're not elevated :(:(
goto end)
Jeśli poziom błędu jest jeden, wyświetl komunikat błędu i przejdź do końca.
goto start
Jeśli nazwa pliku już istnieje, Odtwórz folder (w przeciwnym razie polecenie goto end
nie pozwoli na jego uruchomienie).
:end
Określ punkt końcowy
rd \windows\%randname% 2>nul
Usuń utworzony katalog.
pause >nul
Zatrzymaj, aby użytkownik mógł zobaczyć wiadomość.
Uwaga : >nul
i 2>nul
filtrują wyjście tych poleceń.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-22 14:50:06
net user %username% >nul 2>&1 && echo admin || echo not admin
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-09 12:09:22
Myślę, że najprostszym sposobem jest próba zmiany daty systemowej (która wymaga uprawnień administratora):
date %date%
if errorlevel 1 (
echo You have NOT admin rights
) else (
echo You have admin rights
)
Jeśli %date%
zmienna może zawierać dzień tygodnia, Wystarczy pobrać datę z ostatniej części DATE
komendy:
for /F "delims=" %%a in ('date ^<NUL') do set "today=%%a" & goto break
:break
for %%a in (%today%) do set "today=%%a"
date %today%
if errorlevel 1 ...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 17:26:18
Znalazłem użytkownika, który może używać net session
, mimo że nie jest adminem. Nie zastanawiałam się dlaczego. Moim obejściem jest sprawdzenie, czy użytkownik może utworzyć folder w folderze windows.
Oto Mój kod:
::::::: :testadmin function START :::::::
:: this function tests if current user is admin. results are returned as "true" or "false" in %isadmin%
:: Test "%isadmin" after calling this function
:: Usage: "call :testadmin"
echo Your script entered the :testadmin function by error. Usage: "call :testadmin"
pause
exit /b
:testadmin
rd %windir%\local_admin_test > nul 2> nul
md %windir%\local_admin_test > nul 2> nul
if [%errorlevel%]==[0] set isadmin=true
if not [%errorlevel%]==[0] set isadmin=false
rd %windir%\local_admin_test > nul 2> nul
if [%isadmin%]==[true] (
echo User IS admin.
)
if not [%isadmin%]==[true] (
echo User IS NOT admin.
timeout 30
:: or use "pause" instead of "timeout"
exit /b
)
exit /b
:::::: :testadmin function END ::::::
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-20 12:56:12
Oto moje 2-grosze warte:
Potrzebowałem partii do uruchomienia w środowisku domeny podczas procesu logowania użytkownika, w środowisku "workroom", widząc użytkowników przestrzegających zasad "blokowania" i ograniczonego widoku (głównie dystrybuowanego za pośrednictwem zestawów GPO).
Zestaw GPO domeny jest stosowany przed skryptem logowania połączonego z użytkownikiem reklamy Tworzenie skryptu logowania GPO było zbyt dojrzałe, ponieważ użytkownicy" nowy "profil nie został utworzony/załadowany / lub gotowy na czas, aby zastosować pasek zadań" Usuń i/lub Pin " i Pozycje Menu Start vbscript + Dodaj pliki lokalne.
Np.: proponowane środowisko profilu' default-user ' wymaga ".URL" (.LNK) Skrót umieszczony w "%ProgramData% \ Microsoft \ Windows \ Start Menu \ Programs * MyNewOWA.url*", oraz "C:\Users\Public\Desktop\ * MyNewOWA.url * " lokalizacje, między innymi
Użytkownicy mają wiele maszyn w domenie, gdzie tylko te zestawy komputerów "workroom" wymagają tych zasad.
Te foldery wymagają uprawnień administratora do modyfikacji, i chociaż "użytkownik domeny" jest częścią lokalnej grupy "Admin" - UAC było kolejnym wyzwaniem.
Znaleźć różne adaptacje i amalgamaty tutaj. Mam również niektórych użytkowników z urządzeniami BYOD, które wymagały innych plików z problemami perm. Nie testowałem na XP (trochę za stary OS), ale kod jest obecny, chciałbym feed back.
:: ------------------------------------------------------------------------
:: You have a royalty-free right to use, modify, reproduce and distribute
:: the Sample Application Files (and/or any modified version) in any way
:: you find useful, provided that you agree that the author provides
:: no warranty, obligations or liability for any Sample Application Files.
:: ------------------------------------------------------------------------
:: ********************************************************************************
::* Sample batch script to demonstrate the usage of RunAs.cmd
::*
::* File: RunAs.cmd
::* Date: 12/10/2013
::* Version: 1.0.2
::*
::* Main Function: Verifies status of 'bespoke' Scripts ability to 'Run As - Admin'
::* elevated privileges and without UAC prompt
::*
::* Usage: Run RunAs.cmd from desired location
::* Bespoke.cmd will be created and called from C:\Utilities location
::* Choose whether to delete the script after its run by removing out-comment
::* (::) before the 'Del /q Bespoke.cmd' command
::*
::* Distributed under a "GNU GPL" type basis.
::*
::* Revisions:
::* 1.0.0 - 08/10/2013 - Created.
::* 1.0.1 - 09/10/2013 - Include new path creation.
::* 1.0.2 - 12/10/2013 - Modify/shorten UAC disable process for Admins
::*
::* REFERENCES:
::* Sample "*.inf" secpol.msc export from Wins 8 x64 @ bottom,
::* Would be default but for 'no password complexities'
::*
::* To recreate UAC default:
::* Goto:Secpol, edit out Exit, modify .inf set, export as "Wins8x64.inf"
::* and import using secedit cmd provided
::*
:: ********************************************************************************
@echo off & cls
color 9F
Title RUN AS
Setlocal
:: Verify local folder availability for script
IF NOT EXIST C:\Utilities (
mkdir C:\Utilities & GOTO:GenBatch
) ELSE (
Goto:GenBatch
)
:GenBatch
c:
cd\
cd C:\Utilities
IF NOT EXIST C:\Utilities\Bespoke.cmd (
GOTO:CreateBatch
) ELSE (
Goto:RunBatch
)
:CreateBatch
Echo. >Bespoke.cmd
Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
Echo :: You have a royalty-free right to use, modify, reproduce and distribute >>Bespoke.cmd
Echo :: the Sample Application Files (and/or any modified version) in any way >>Bespoke.cmd
Echo :: you find useful, provided that you agree that the author provides >>Bespoke.cmd
Echo :: has no warranty, obligations or liability for any Sample Application Files. >>Bespoke.cmd
Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
Echo. >>Bespoke.cmd
Echo :: ******************************************************************************** >>Bespoke.cmd
Echo ::* Sample batch script to demonstrate the usage of Bespoke.cmd >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* File: Bespoke.cmd >>Bespoke.cmd
Echo ::* Date: 10/10/2013 >>Bespoke.cmd
Echo ::* Version: 1.0.1 >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* Main Function: Allows for running of Bespoke batch with elevated rights and no future UAC 'pop-up' >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* Usage: Called and created by RunAs.cmd run from desired location >>Bespoke.cmd
Echo ::* Found in the C:\Utilities folder >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* Distributed under a "GNU GPL" type basis. >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* Revisions: >>Bespoke.cmd
Echo ::* 1.0.0 - 09/10/2013 - Created. >>Bespoke.cmd
Echo ::* 1.0.1 - 10/10/2013 - Modified, added ability to temp disable UAC pop-up warning. >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* REFERENCES: >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* Exit code (%%^ErrorLevel%%) 0 - No errors have occurred, i.e. immediate previous command ran successfully >>Bespoke.cmd
Echo ::* Exit code (%%^ErrorLevel%%) 1 - Errors occurred, i.e. immediate previous command ran Unsuccessfully >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* MS OS version check >>Bespoke.cmd
Echo ::* http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* Copying to certain folders and running certain apps require elevated perms >>Bespoke.cmd
Echo ::* Even with 'Run As ...' perms, UAC still pops up. >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* To run a script or application in the Windows Shell >>Bespoke.cmd
Echo ::* http://ss64.com/vb/shellexecute.html >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo ::* Machines joined to a corporate Domain should have the UAC feature set from, and >>Bespoke.cmd
Echo ::* pushed out from a DC GPO policy >>Bespoke.cmd
Echo ::* e.g.: 'Computer Configuration - Policies - Windows Settings - Security Settings - >>Bespoke.cmd
Echo ::* Local Policies/Security Options - User Account Control - >>Bespoke.cmd
Echo ::* Policy: User Account Control: Behavior of the elevation prompt for administrators >>Bespoke.cmd
Echo ::* in Admin Approval Mode Setting: Elevate without prompting >>Bespoke.cmd
Echo ::* >>Bespoke.cmd
Echo :: ******************************************************************************** >>Bespoke.cmd
Echo.>>Bespoke.cmd
Echo @Echo off ^& cls>>Bespoke.cmd
Echo color 9F>>Bespoke.cmd
Echo Title RUN AS ADMIN>>Bespoke.cmd
Echo Setlocal>>Bespoke.cmd
Echo.>>Bespoke.cmd
Echo Set "_OSVer=">>Bespoke.cmd
Echo Set "_OSVer=UAC">>Bespoke.cmd
Echo VER ^| FINDSTR /IL "5." ^>NUL>>Bespoke.cmd
Echo IF %%^ErrorLevel%%==0 SET "_OSVer=PreUAC">>Bespoke.cmd
Echo IF %%^_OSVer%%==PreUAC Goto:XPAdmin>>Bespoke.cmd
Echo.>>Bespoke.cmd
Echo :: Check if machine part of a Domain or within a Workgroup environment >>Bespoke.cmd
Echo Set "_DomainStat=">>Bespoke.cmd
Echo Set "_DomainStat=%%USERDOMAIN%%">>Bespoke.cmd
Echo If /i %%^_DomainStat%% EQU %%^computername%% (>>Bespoke.cmd
Echo Goto:WorkgroupMember>>Bespoke.cmd
Echo ) ELSE (>>Bespoke.cmd
Echo Set "_DomainStat=DomMember" ^& Goto:DomainMember>>Bespoke.cmd
Echo )>>Bespoke.cmd
Echo.>>Bespoke.cmd
Echo :WorkgroupMember>>Bespoke.cmd
Echo :: Verify status of Secpol.msc 'ConsentPromptBehaviorAdmin' Reg key >>Bespoke.cmd
Echo reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin ^| Find /i "0x0">>Bespoke.cmd
Echo.>>Bespoke.cmd
Echo If %%^ErrorLevel%%==0 (>>Bespoke.cmd
Echo Goto:BespokeBuild>>Bespoke.cmd
Echo ) Else (>>Bespoke.cmd
Echo Goto:DisUAC>>Bespoke.cmd
Echo )>>Bespoke.cmd
Echo :DisUAC>>Bespoke.cmd
Echo :XPAdmin>>Bespoke.cmd
Echo :DomainMember>>Bespoke.cmd
Echo :: Get ADMIN Privileges, Start batch again, modify UAC ConsentPromptBehaviorAdmin reg if needed >>Bespoke.cmd
Echo ^>nul ^2^>^&1 ^"^%%^SYSTEMROOT%%\system32\cacls.exe^"^ ^"^%%^SYSTEMROOT%%\system32\config\system^">>Bespoke.cmd
Echo.>>Bespoke.cmd
Echo IF ^'^%%^Errorlevel%%^'^ NEQ '0' (>>Bespoke.cmd
Echo echo Set objShell = CreateObject^^("Shell.Application"^^) ^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
Echo echo objShell.ShellExecute ^"^%%~s0^"^, "", "", "runas", 1 ^>^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
Echo ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
Echo del ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
Echo exit /B>>Bespoke.cmd
Echo ) else (>>Bespoke.cmd
Echo pushd ^"^%%^cd%%^">>Bespoke.cmd
Echo cd /d ^"^%%~dp0^">>Bespoke.cmd
Echo @echo off>>Bespoke.cmd
Echo )>>Bespoke.cmd
Echo.>>Bespoke.cmd
Echo IF %%^_OSVer%%==PreUAC Goto:BespokeBuild>>Bespoke.cmd
Echo IF %%^_DomainStat%%==DomMember Goto:BespokeBuild>>Bespoke.cmd
Echo.>>Bespoke.cmd
Echo reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f>>Bespoke.cmd
Echo.>>Bespoke.cmd
Echo :BespokeBuild>>Bespoke.cmd
Echo :: Add your script requiring elevated perm and no UAC below: >>Bespoke.cmd
Echo.>>Bespoke.cmd
:: PROVIDE BRIEF EXPLINATION AS TO WHAT YOUR SCRIPT WILL ACHIEVE
Echo ::
:: ADD THE "PAUSE" BELOW ONLY IF YOU SET TO SEE RESULTS FROM YOUR SCRIPT
Echo Pause>>Bespoke.cmd
Echo Goto:EOF>>Bespoke.cmd
Echo :EOF>>Bespoke.cmd
Echo Exit>>Bespoke.cmd
Timeout /T 1 /NOBREAK >Nul
:RunBatch
call "Bespoke.cmd"
:: Del /F /Q "Bespoke.cmd"
:Secpol
:: Edit out the 'Exit (rem or ::) to run & import default wins 8 security policy provided below
Exit
:: Check if machine part of a Domain or within a Workgroup environment
Set "_DomainStat="
Set _DomainStat=%USERDOMAIN%
If /i %_DomainStat% EQU %computername% (
Goto:WorkgroupPC
) ELSE (
Echo PC Member of a Domain, Security Policy determined by GPO
Pause
Goto:EOF
)
:WorkgroupPC
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
Echo.
If %ErrorLevel%==0 (
Echo Machine already set for UAC 'Prompt'
Pause
Goto:EOF
) else (
Goto:EnableUAC
)
:EnableUAC
IF NOT EXIST C:\Utilities\Wins8x64Def.inf (
GOTO:CreateInf
) ELSE (
Goto:RunInf
)
:CreateInf
:: This will create the default '*.inf' file and import it into the
:: local security policy for the Wins 8 machine
Echo [Unicode]>>Wins8x64Def.inf
Echo Unicode=yes>>Wins8x64Def.inf
Echo [System Access]>>Wins8x64Def.inf
Echo MinimumPasswordAge = ^0>>Wins8x64Def.inf
Echo MaximumPasswordAge = ^-1>>Wins8x64Def.inf
Echo MinimumPasswordLength = ^0>>Wins8x64Def.inf
Echo PasswordComplexity = ^0>>Wins8x64Def.inf
Echo PasswordHistorySize = ^0>>Wins8x64Def.inf
Echo LockoutBadCount = ^0>>Wins8x64Def.inf
Echo RequireLogonToChangePassword = ^0>>Wins8x64Def.inf
Echo ForceLogoffWhenHourExpire = ^0>>Wins8x64Def.inf
Echo NewAdministratorName = ^"^Administrator^">>Wins8x64Def.inf
Echo NewGuestName = ^"^Guest^">>Wins8x64Def.inf
Echo ClearTextPassword = ^0>>Wins8x64Def.inf
Echo LSAAnonymousNameLookup = ^0>>Wins8x64Def.inf
Echo EnableAdminAccount = ^0>>Wins8x64Def.inf
Echo EnableGuestAccount = ^0>>Wins8x64Def.inf
Echo [Event Audit]>>Wins8x64Def.inf
Echo AuditSystemEvents = ^0>>Wins8x64Def.inf
Echo AuditLogonEvents = ^0>>Wins8x64Def.inf
Echo AuditObjectAccess = ^0>>Wins8x64Def.inf
Echo AuditPrivilegeUse = ^0>>Wins8x64Def.inf
Echo AuditPolicyChange = ^0>>Wins8x64Def.inf
Echo AuditAccountManage = ^0>>Wins8x64Def.inf
Echo AuditProcessTracking = ^0>>Wins8x64Def.inf
Echo AuditDSAccess = ^0>>Wins8x64Def.inf
Echo AuditAccountLogon = ^0>>Wins8x64Def.inf
Echo [Registry Values]>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SecurityLevel=4,^0>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SetCommand=4,^0>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\CachedLogonsCount=1,"10">>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceUnlockLogon=4,^0>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\PasswordExpiryWarning=4,5>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ScRemoveOption=1,"0">>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin=4,5>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorUser=4,3>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableCAD=4,1>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DontDisplayLastUserName=4,^0>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableInstallerDetection=4,1>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA=4,1>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableSecureUIAPaths=4,1>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableUIADesktopToggle=4,^0>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableVirtualization=4,1>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\FilterAdministratorToken=4,^0>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeCaption=1,"">>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeText=7,>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\PromptOnSecureDesktop=4,1>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ScForceOption=4,^0>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ShutdownWithoutLogon=4,1>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\UndockWithoutLogon=4,1>>Wins8x64Def.inf
Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ValidateAdminCodeSignatures=4,^0>>Wins8x64Def.inf
Echo MACHINE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\AuthenticodeEnabled=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\AuditBaseObjects=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\CrashOnAuditFail=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\DisableDomainCreds=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\EveryoneIncludesAnonymous=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\FullPrivilegeAuditing=3,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\LimitBlankPasswordUse=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinClientSec=4,536870912>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinServerSec=4,536870912>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymous=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymousSAM=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers\AddPrinterDrivers=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedExactPaths\Machine=7,System\CurrentControlSet\Control\ProductOptions,System\CurrentControlSet\Control\Server Applications,Software\Microsoft\Windows NT\CurrentVersion>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedPaths\Machine=7,System\CurrentControlSet\Control\Print\Printers,System\CurrentControlSet\Services\Eventlog,Software\Microsoft\OLAP Server,Software\Microsoft\Windows NT\CurrentVersion\Print,Software\Microsoft\Windows NT\CurrentVersion\Windows,System\CurrentControlSet\Control\ContentIndex,System\CurrentControlSet\Control\Terminal Server,System\CurrentControlSet\Control\Terminal Server\UserConfig,System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration,Software\Microsoft\Windows NT\CurrentVersion\Perflib,System\CurrentControlSet\Services\SysmonLog>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Kernel\ObCaseInsensitive=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Session Manager\ProtectionMode=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\optional=7,Posix>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\AutoDisconnect=4,15>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableForcedLogOff=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableSecuritySignature=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\NullSessionPipes=7,>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RestrictNullSessAccess=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnablePlainTextPassword=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnableSecuritySignature=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\LDAP\LDAPClientIntegrity=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange=4,^0>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\MaximumPasswordAge=4,30>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireSignOrSeal=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireStrongKey=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SealSecureChannel=4,1>>Wins8x64Def.inf
Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SignSecureChannel=4,1>>Wins8x64Def.inf
Echo [Privilege Rights]>>Wins8x64Def.inf
Echo SeNetworkLogonRight = *S-1-1-0,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
Echo SeBackupPrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
Echo SeChangeNotifyPrivilege = *S-1-1-0,*S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-90-^0>>Wins8x64Def.inf
Echo SeSystemtimePrivilege = *S-1-5-19,*S-1-5-32-544>>Wins8x64Def.inf
Echo SeCreatePagefilePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeDebugPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeRemoteShutdownPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeAuditPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
Echo SeIncreaseQuotaPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544>>Wins8x64Def.inf
Echo SeIncreaseBasePriorityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeLoadDriverPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeBatchLogonRight = *S-1-5-32-544,*S-1-5-32-551,*S-1-5-32-559>>Wins8x64Def.inf
Echo SeServiceLogonRight = *S-1-5-80-0,*S-1-5-83-^0>>Wins8x64Def.inf
Echo SeInteractiveLogonRight = Guest,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
Echo SeSecurityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeSystemEnvironmentPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeProfileSingleProcessPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeSystemProfilePrivilege = *S-1-5-32-544,*S-1-5-80-3139157870-2983391045-3678747466-658725712-1809340420>>Wins8x64Def.inf
Echo SeAssignPrimaryTokenPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
Echo SeRestorePrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
Echo SeShutdownPrivilege = *S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
Echo SeTakeOwnershipPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeDenyNetworkLogonRight = Guest>>Wins8x64Def.inf
Echo SeDenyInteractiveLogonRight = Guest>>Wins8x64Def.inf
Echo SeUndockPrivilege = *S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
Echo SeManageVolumePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
Echo SeRemoteInteractiveLogonRight = *S-1-5-32-544,*S-1-5-32-555>>Wins8x64Def.inf
Echo SeImpersonatePrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
Echo SeCreateGlobalPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
Echo SeIncreaseWorkingSetPrivilege = *S-1-5-32-545,*S-1-5-90-^0>>Wins8x64Def.inf
Echo SeTimeZonePrivilege = *S-1-5-19,*S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
Echo SeCreateSymbolicLinkPrivilege = *S-1-5-32-544,*S-1-5-83-^0>>Wins8x64Def.inf
Echo [Version]>>Wins8x64Def.inf
Echo signature="$CHICAGO$">>Wins8x64Def.inf
Echo Revision=1>>Wins8x64Def.inf
:RunInf
:: Import 'Wins8x64Def.inf' with ADMIN Privileges, to modify UAC ConsentPromptBehaviorAdmin reg
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%%\system32\config\system"
IF '%Errorlevel%' NEQ '0' (
echo Set objShell = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo objShell.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
Goto:CheckUAC
) else (
Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
@echo off
)
:CheckUAC
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
Echo.
If %ErrorLevel%==0 (
Echo ConsentPromptBehaviorAdmin set to 'Prompt'
Pause
Del /Q C:\Utilities\Wins8x64Def.inf
Goto:EOF
) else (
Echo ConsentPromptBehaviorAdmin NOT set to default
Pause
)
ENDLOCAL
:EOF
Exit
Domeny PC powinny być zarządzane w jak największym stopniu przez zestawy GPO. Grupa robocza / samodzielne maszyny mogą być zarządzane przez to scenariusz.
Pamiętaj, że monit UAC pojawi się co najmniej raz na komputerze grupy roboczej BYOD (gdy tylko wymagane jest pierwsze przejście do "trwałej pracy administratora"), ale gdy lokalna polityka bezpieczeństwa zostanie zmodyfikowana do użytku administratora od tego momentu, wyskakujące okienka znikną.
Domena PC powinna mieć politykę GPO "ConsentPromptBehaviorAdmin" ustawioną w "już" utworzonej "polityce blokowania" - jak wyjaśniono w sekcji "referencje" skryptu.
Ponownie uruchom secedit.exe import z default".plik inf jeśli utkniesz na całej debacie "do UAC czy nie do UAC": -).
Btw: @ boileau Sprawdź swoją awarię na:
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
Uruchamiając tylko " % SYSTEMROOT% \ system32 \ cacls.exe " lub "% SYSTEMROOT% \ system32 \ config \ system " lub oba z wiersza polecenia-podwyższone lub nie, sprawdź wynik na całej planszy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-13 17:27:29
Inny sposób, aby to zrobić.
REM # # # # CHECKING OR IS STARTED AS ADMINISTRATOR # # # # #
FSUTIL | findstr /I "volume" > nul&if not errorlevel 1 goto Administrator_OK
cls
echo *******************************************************
echo *** R U N A S A D M I N I S T R A T O R ***
echo *******************************************************
echo.
echo.
echo Call up just as the Administrator. Abbreviation can be done to the script and set:
echo.
echo Shortcut ^> Advanced ^> Run as Administrator
echo.
echo.
echo Alternatively, a single run "Run as Administrator"
echo or in the Schedule tasks with highest privileges
pause > nul
goto:eof
:Administrator_OK
REM Some next lines code ...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-07 23:10:04