Script em lote: como verificar os direitos de administrador

7

Como posso verificar se o script em lote atual tem direitos de administrador?

Eu sei como chamar a si mesmo com runas, mas não como verificar os direitos de administrador. As únicas soluções que vi são trabalhos de hackeamento brutos.

    
por flacs 29.10.2010 / 14:07

4 respostas

5

Você sempre pode fazer algo assim

mkdir "%windir%\system32\test" 2>nul
if "%errorlevel%" == "0" (rmdir "%windir%\system32\test" & echo Is admin) else (echo Not an Admin)

Não é a melhor das maneiras, mas funciona para mim o tempo todo.

    
por 29.10.2010 / 16:49
2

Após algumas pesquisas (principalmente em SO [1] ), descobri que net nem sempre é uma boa solução, pode mostrar resultados falsos negativos. Mas há fsutil disponível para o WinXP para o Win10. Vale a pena ler toda a resposta perspicaz "Mais problemas" à questão script em lote: como verificar os direitos de administrador lá.

Esta é a resposta curta para usuários apressados:

fsutil dirty query %systemdrive% >nul
if %errorlevel% == 0 (
    echo Running with admin rights.
) else (
    echo Running without
)

[1] meu problema real foi elevação, mas verificação não invasiva é parte disso:

por 03.02.2017 / 13:47
0

Este é o melhor kludge em que eu consegui pensar, usando comandos padrão:

net user %username% | findstr /r Administrator.
if %errorlevel% == 1 (
echo This is not an admin account
) else (
echo This is an admin account
)
    
por 29.10.2010 / 14:53
-1

Você só precisa desta linha no topo de seus lotes que exigem elevação. ênfase em "One Line"

nul 2>&1 fsutil dirty query %systemdrive% || echo CreateObject^("Shell.Application"^).ShellExecute "%~0", "ELEVATED", "", "runas", 1 > "getadmin.vbs" && "getadmin.vbs" && exit /b

    
por 15.03.2017 / 22:06