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.

Author: a_horse_with_no_name, 2010-10-29

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) lub WHOAMI (Windows XP niezgodny).
Każdy z nich ma swoje problemy z bezpieczeństwem, użytecznością i przenośnością.

 

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."

Tak więc, oto podstawowy proces mojej podanej implementacji:]}
  1. @echo off
    • Wyłącz wyświetlanie poleceń
  2. goto check_Permissions
    • przejdź do :check_Permissions bloku kodu
  3. net session >nul 2>&1
    • Uruchom polecenie
    • Ukryj wizualne wyjście polecenia przez
      1. przekierowanie standardowego wyjścia (numeryczny Uchwyt 1 / STDOUT) strumienia na nul
      2. przekierowanie standardowego strumienia wyjściowego błędu (numeryczny uchwyt 2 / STDERR) do tego samego miejsca przeznaczenia co numeryczny Uchwyt 1
  4. if %errorLevel% == 0
    • jeśli wartość kodu wyjścia (%errorLevel%) na 0 oznacza to, że nie wystąpiły żadne błędy i dlatego natychmiastowe poprzednie polecenie uruchomiło pomyślnie
  5. else
    • jeśli wartość kodu wyjścia (%errorLevel%) nie jest 0 oznacza to, że błędy mają wystÄ ... piĹ 'o i dlatego natychmiastowe poprzednie polecenie uruchomiĺ' o bezskutecznie
  6. Kod pomiędzy odpowiednim nawiasem będzie wykonywany w zależności od spełnionych kryteriów

 

Screeny

Okna 8 AT %errorLevel%:

[imgur]

 

NET SESSION na Windows XP x86-Windows 8 x64 :

[imgur]

 

Dziękuję, @ Tilka, za zmianę twoja zaakceptowana odpowiedź wobec mojej. :)

 392
Author: mythofechelon,
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ź.

 73
Author: blak3r,
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
 35
Author: and31415,
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...
)
 17
Author: Anders,
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
)
 16
Author: npocmaka,
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
 13
Author: Lucretius,
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ą.)

 11
Author: Philm,
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" i ERRORLEVEL == 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
 9
Author: Vitim.us,
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.

 5
Author: Benoit,
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.

 5
Author: William,
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.

 3
Author: zumalifeguard,
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
)
 2
Author: Totonga,
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ć.

 2
Author: Dan,
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.

 2
Author: Tyler Szabo,
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
 1
Author: user2902818,
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.

 1
Author: ivan_pozdeev,
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"
    }
}
 1
Author: ostati,
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.

 1
Author: script'n'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
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

 0
Author: Bill_Stewart,
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...
 0
Author: cmd,
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ń.

 0
Author: EKons,
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

 0
Author: heretic,
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 ...
 0
Author: Aacini,
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 ::::::
 0
Author: Grallen,
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.

 -1
Author: Ian Stockdale,
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 ...
 -2
Author: Artur Zgadzaj,
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