Cum pot verifica dacă actualul lot script are drepturi de admin?
Știu cum să facă apel în sine cu runas dar nu cum să verificați pentru drepturi de admin. Singurele soluții I'am văzut brut hack locuri de muncă sau de a folosi programe externe. Ei bine, de fapt eu nu't pasă dacă acesta este un hack de locuri de muncă atâta timp cât funcționează pe Windows XP și mai noi.
blak3r / Rushyo's soluție funcționează bine pentru tot, cu excepția Windows 8. De funcționare " LA " pe Windows 8 rezultate din:
The AT command has been deprecated. Please use schtasks.exe instead.
The request is not supported.
(vezi screenshot #1) și va reveni errorLevel %
1
.
Deci, m-am dus în căutarea pentru alte comenzi care necesită permisiuni de ridicat. rationallyparanoid.com a avut o listă de câteva, așa că am fugit fiecare comandă de pe cele două extreme opuse de curent Windows OSs (XP și 8), în speranța de a găsi o comanda care ar fi refuzat accesul de pe ambele OSs când rula cu permisiuni standard.
În cele din urmă, am găsit unul - NET SESIUNE`. O adevărat, curat, soluție universală care nu't implica:
WHOAMI
(Windows XP incompatibile). Fiecare dintre acestea au propriile lor de securitate, gradul de utilizare și portabilitate probleme.
Am've independent a confirmat că aceasta funcționează pe:
(vezi screenshot #2)
Deci, pentru a folosi această soluție, pur și simplu face ceva de genul asta:
@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
Disponibil aici, daca're leneș: https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat
NET de SESIUNE este un standard de comandă folosit pentru "gestionați server conexiuni. Folosit fara parametri, [l] afișează informații despre toate sesiunile cu computerul local."
Deci, aici's procesul de bază al meu dat de implementare:
@echo off
du-te check_Permissions
net sesiune >nul 2>&1
STDOUT
) stream să nul
STDERR
) la aceeași destinație ca numerice mâner 1errorLevel%
) e 0
, atunci acest lucru înseamnă că, nu s-au produs erori și, prin urmare, imediat comanda anterioară ran succeserrorLevel%
) nu este 0
, atunci acest lucru înseamnă că, s-au produs erori și, prin urmare, imediat comanda anterioară ran succes
NET de SESIUNE pe Windows XP x86 - Windows 8 x64:
Multumesc, @Tilka, pentru schimbarea acceptat răspunsul la a mea. :)
Anders soluție a lucrat pentru mine, dar am fost't sigur cum să invertit pentru a obține opus (când ai fost't un admin).
Aici's my soluție. Acesta are două cazuri, DACĂ și ALTCINEVA caz, și unele ascii de artă pentru a se asigura că oamenii chiar citesc. :)
Rushyo postat această soluție aici: https://stackoverflow.com/questions/7985755/how-to-detect-if-cmd-is-running-as-administrator-has-elevated-privileges
NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
ECHO Administrator PRIVILEGES Detected!
) ELSE (
ECHO NOT AN ADMIN!
)
@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
Funcționează pe WinXP --> Win8 (inclusiv 32/64 biți).
EDIT: 8/28/2012 Actualizat pentru a sprijini Windows 8. @BenHooper subliniat acest lucru în răspunsul de mai jos. Vă rugăm să upvote răspunsul lui.
După cum a subliniat de către @Lectrode, dacă încercați să executați net sesiune de comandă în timp ce Serverul este oprit serviciul, primiți următorul mesaj de eroare:
The Server service is not started.
More help is available by typing NET HELPMSG 2114
În acest caz errorLevel %
variabil va fi setat la 2
.
Notă serviciul De Server nu este început în timp ce în Modul de Siguranță (cu sau fără rețea).
Ceva care:
Asa ca am pornit-o de vanilie Windows XP virtual machine și am început derularea prin lista de aplicații în C:\Windows\System32 dosarul, încercarea de a obține unele idei. După încercări și erori, aceasta este murdar (joc de cuvinte destinate) abordare I'am venit cu:
fsutil dirty query %systemdrive% >nul
Anii fsutil murdar comandă necesită drepturi de administrator pentru a rula, și nu va reuși altfel.
%systemdrive%este o variabilă de mediu][1], care returnează litera partitiei unde este instalat sistemul de operare. Output-ul este redirecționat către
nul, astfel ignorate. Anii
errorlevel %` variabil va fi setat la " 0 " numai la executarea cu succes.
Aici este ceea ce documentația spune:
Fsutil murdar
Interogări sau stabilește un volum de's dirty bit. Atunci când un volum's dirty bit este setat, autochk exe verifică automat volumul pentru erorile data viitoare când computerul este repornit.
Sintaxa
fsutil murdar {interogare | set}
Parametrii
interogare Interogări volumul specificat's dirty bit. set Stabilește volumul specificat's dirty bit.
Comentarii Un volum's dirty bit indică faptul că sistemul de fișiere poate fi într-o stare inconsistentă. Dirty bit poate fi setat pentru că:
- volumul este online si are restante modificări.
- au fost efectuate Modificări la volumul și calculatorul a fost oprit înainte de modificările au fost comise pe disc.
- Corupție a fost detectat pe volum.
Dacă dirty bit este setat când computerul repornește, chkdsk se execută pentru a verifica integritatea sistemului de fișiere și pentru a încerca să rezolve orice probleme cu volumul.
Exemple #
Pentru a interoga murdar pic pe unitatea C, de tip:
fsutil murdar interogare C:
În timp ce soluția de mai sus funcționează de la Windows XP incoace, l's demn de mentionat ca Windows 2000 și Windows PE (Preinstalate Mediu) don't veni cu fsutil.exe`, așa că trebuie să recurgă la altceva.
În timpul încercărilor anterioare am observat că rularea `sfc de comandă fără parametri ar duce fie la:
Asta este: nu parametrilor, nici un partid nu. Ideea este că putem analiza ieșire și verificați dacă avem nimic, dar o eroare:
sfc 2>&1 | find /i "/SCANNOW" >nul
Eroarea de ieșire este prima redirecționat către dispozitivul standard de ieșire, care este apoi transportat prin conducte la "găsi" comanda. În acest moment trebuie să se uite pentru numai parametru care este a sprijinit în toate versiune de Windows, deoarece Windows 2000: /SCANNOW
. Căutare este cazul insensibil, și de ieșire este eliminată prin redirecționarea-l la nul
.
Aici's un extras din documentația:
Sfc
Scanează și verifică integritatea toate fișierele de sistem protejate și înlocuiește versiunile incorecte cu versiunile corecte.
Comentarii
Trebuie sa fi logat ca membru al grupului de Administratori pentru a rula sfc.exe.
Aici sunt unele paste-și-a alerga exemple:
@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
@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
o modalitate mai mult
fltmc >nul 2>&1 && (
echo has admin permissions
) || (
echo has NOT admin permissions
)
fltmc exe
comanda este disponibil pe orice sistem windows, începând cu XP deci, acest lucru ar trebui să fie destul de portabil.
Mai repede o soluție testat pe XP,
8.1,
7(din păcate, s-ar putea să nu funcționeze pe toate
win10 mașini - a se vedea comentariile.) - nu's o anumită variabilă =::
care este prezentat doar dacă console session nu are privilegii de administrator.Ca aceasta nu este atât de ușor de a crea variabilă care conține =
în l's nume este relativ sigur mod de a verifica pentru permisiunea de admin (nu suna externe executabile așa că funcționează bine)
setlocal enableDelayedExpansion
set "dv==::"
if defined !dv! (
echo has NOT admin permissions
) else (
echo has admin permissions
)
Nu verifica numai, ci OBTINEREA de drepturi de admin automat aka Automată UAC pentru Win 7/8/8.1 ff.: Următoarele este o foarte bună cu una mai mult caracteristică: Acest lot fragment nu verifică numai pentru drepturi de admin, dar le primește în mod automat! (și teste înainte de, în cazul în care trăiesc într-o UAC capabil de OPERARE.)
Cu acest truc nu´t nevoie de mai mult pentru a klick dreapta pe fișier batch "cu drepturi de admin". Dacă ați uitat, să-l înceapă cu drepturi elevate, UAC vine în mod automat! În plus, la început, este testat, dacă sistemul de OPERARE are nevoie de/oferă UAC-ul, astfel încât acesta se comportă corect, de exemplu pentru Win 2000/XP până la Win 8.1 - testat.
@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
)
Fragmentul îmbină un lot bun de modele împreună, mai ales (1) administratorul de test în acest thread de Ben Hooper și (2) UAC-ul de activare citit pe BatchGotAdmin și a citat pe site-ul lot de robvanderwoude (respect). (3) Pentru sistemul de OPERARE identificaton de "VER | FINDSTR model" nu't găsi de referință.)
(Cu privire la unele foarte mici restricții, atunci când "NET SESIUNE de" nu funcționează așa cum am menționat într-un alt răspuns - simțiți-vă liber pentru a introduce un alt de acele comenzi. Pentru mine rulează în Windows safe mode sau speciale servicii standard în jos și astfel nu sunt un important cazuri de utilizare - pentru unii admini poate că sunt.)
Am două moduri de control pentru acces privilegiat, ambele sunt destul de fiabile, și foarte portabil pe aproape orice versiune de windows.
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!
)
Aceasta este una dintre metodele cele mai sigure, din cauza simplității sale, și comportamentul de acest lucru foarte primitiv comanda este foarte puțin probabil să se schimbe. Nu este cazul de alte built-in CLI instrumente, cum ar fi net sesiune care poate fi dezactivat de către admin/politici de rețea, sau comenzi, cum ar fi fsutils care a schimbat ieșire pe Windows calculator 10.
* Works pe XP si later
REG ADD HKLM /F>nul 2>&1
IF %ERRORLEVEL%==0 (
ECHO PRIVILEGED!
) ELSE (
ECHO NOT PRIVILEGED!
)
Uneori n't place ideea de a atinge pe disc utilizator, chiar dacă acesta este la fel de inofensiv ca folosind fsutils sau de a crea un folder gol, este ea nu poate fi dovedită, dar aceasta poate duce la un eșec catastrofal dacă ceva nu merge bine. În acest scenariu, puteți verifica registrul de privilegii.
Pentru aceasta, puteți încerca pentru a crea o cheie pe HKEY_LOCAL_MACHINE folosind permisiunile implicite te'll Acces Refuzat și
ERRORLEVEL == 1
, dar dacă tu a alerga ca Administrator, se va imprima "comanda executat cu succes" șiERRORLEVEL == 0
. Deoarece cheia există deja o au nici un efect asupra registry. Aceasta este, probabil, cel mai rapid mod, iar REG este acolo pentru o lungă perioadă de timp.* It's nu cu marfa pe pre NT (Win 9X).
* Works pe XP si later
Un script care șterge folderul 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
Cel mai curat mod de a verifica pentru privilegii de administrator folosind un CMD script-ul, care am găsit-o, este ceva de genul:
@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
Această metodă utilizează numai CMD.exe builtins, așa că ar trebui să fie foarte rapid. Se verifică, de asemenea, pentru capacitățile reale de proces, mai degrabă decât de verificare pentru SIDs sau apartenența la grup, astfel încât eficient permisiunea este testat. Și acest lucru funcționează, în măsura înapoi ca Windows 2003 și XP. Normală de utilizare a proceselor sau nonelevated procese eșua directorul sonda, unde ca Admin sau valori crescute ale proceselor reuși.
Următoarele încearcă să creeze un fișier în directorul Windows. Dacă suceeds se va elimina.
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
Rețineți că 06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 este un GUID care a fost generat de astăzi și se presupune a fi improbabil in conflict cu un nume de fișier.
În lot script Elevate.cmd (a se vedea acest link), care am scris obține drepturi de admin, am fi făcut-o în felul următor:
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
Acest lucru este testat pentru Windows 7, 8, 8.1, 10 și chiar Windows XP și nu are nevoie de orice resursă, cum ar fi un director special, fișier sau cheie de registry.
La whoami exe /grupuri nu't lucra într-un caz. Daca ai UAC complet oprit (nu doar notificare oprit), și ai pornit de la un Administrator prompt atunci emise:
runas /trustlevel:0x20000 cmd
veți fi difuzate non-valori crescute, dar emitent:
whoami /groups
va spune te're crescute. L's-a întâmplat. Aici's de ce-l's-a întâmplat:
Atunci când rulează în acest stat, dacă IsUserAdmin (https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389(v=vs. 85).aspx) returnează FALSE și UAC este complet dezactivat, și GetTokenInformation se întoarce TokenElevationTypeDefault (http://blogs.msdn.com/b/cjacks/archive/2006/10/24/modifying-the-mandatory-integrity-level-for-a-securable-object-in-windows-vista.aspx), atunci procesul este nu de funcționare ridicate, dar `whoami exe /grupurilor susține că este.
într-adevăr, cel mai bun mod de a face acest lucru dintr-un fișier batch este:
net session >nul 2>nul
net session >nul 2>nul
echo %errorlevel%
Tu ar trebui să facă net de sesiune de două ori pentru că dacă cineva a făcut-o " la " înainte de mână, te'll obține informații greșite.
Edit: copyitright a subliniat că acesta este nesigur. Aprobarea acces de citire cu UAC va permite dir pentru a reuși. Am un pic mai multe script-ul pentru a oferi o posibilitate, dar's nu numai-citire.
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
Vechi răspunsul de mai jos
Avertisment: nesigure
Bazat pe o serie de alte raspunsuri bune aici și puncte aduse de and31415 am constatat că sunt un fan de următoarele:
dir "%SystemRoot%\System32\config\DRIVERS" 2>nul >nul || echo Not Admin
Câteva dependențe și rapid.
Notă: Verificarea cu cacls pentru \system32\config\system va eșua ÎNTOTDEAUNA în WOW64, (de exemplu de la %systemroot%\syswow64\cmd.exe / 32 bit Total Commander), astfel încât script-uri care rulează pe 32 de biți shell în 64 de biți sistem va buclă pentru totdeauna... Mai bine ar fi verificarea pentru drepturile pe Prefetch director:
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\Prefetch\"
Win XP la 7 testat, cu toate acestea eșuează în WinPE ca în windows 7 instalat.wim nu există nici o astfel de dir nici cacls.exe
De asemenea, în winPE ȘI wow64 eșuează, verificați cu openfiles.exe :
OPENFILES > nul
În Windows 7 va errorlevel cu "1" cu informații care "sistem Țintă trebuie să fie pe 32 de biți sistem de operare"
Ambele verifica, probabil, va eșua, de asemenea, în consola de recuperare.
Cum funcționează în Windows XP - 8 32/64 bit, în WOW64 și în WinPE sunt: dir crearea de teste (DACA admin nu't bombardată Windows director cu permisiuni pentru toată lumea...) și
net session
și
reg add HKLM /F
controalele.
De asemenea, încă o notă în windows XP (și alte versiuni, probabil, de asemenea, în funcție de admin's bricolaj), în funcție de intrările de registry de asteptare direct bat/cmd de la .vbs script-ul va eșua, cu informatii care bat/cmd fișiere nu sunt asociate cu orice...
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo
De asteptare cmd.exe cu parametru de bat/cmd fișier pe de altă parte funcționează 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
Zeci de răspunsuri în aceasta și legate de întrebări și în altă parte de la SINE, toate din care sunt deficitare în acest fel sau altul, au arătat în mod clar că Windows nu't oferi o încredere consolă built-in de utilitate. Deci, l's timp să se rostogolească ta.
Următorul cod C, pe baza https://stackoverflow.com/questions/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908, lucrari in Win2k1, oriunde și în toate cazurile (UAC, domenii, grupuri tranzitive...) - pentru că face același lucru ca și sistemul în sine, atunci când se verifică permisiunile. Semnale de rezultat, ambele cu un mesaj (care poate fi redus la tăcere cu un comutator) și codul de ieșire.
Este nevoie doar să fie compilat o dată, atunci aveți posibilitatea să copiați doar .exe
peste tot, depinde doar de kernel32.dll " și " advapi32.dll
(I've încărcate de o copie).
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 susține Api-uri sunt XP+ dar acest lucru este fals. CheckTokenMembership
este 2k+, iar celălalt este chiar mai vechi]3. Ultima link-ul conține, de asemenea, o mult mai complicat modul în care ar funcționa chiar și în NT.
PowerShell cineva?
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"
}
}
Aici este un alt unul pentru a adăuga la lista ;-)
(o încercare de creare a fișierului în sistemul de localizare)
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
)
La MODUL CON` reinitializes ecran și surpresses orice text/erori atunci când nu au permisiunea de a scrie la system locul de amplasare.
Am gasit un user care pot folosi net-ul de sesiune, chiar dacă acestea nu sunt admin. Am't uite în ce. Mea soluție este de a testa dacă utilizatorul poate face un folder în folderul windows.
Aici este codul meu:
::::::: :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 ::::::