Estou procurando escrever um script que aceite a entrada do usuário e faça alterações em todo o sistema. Eu preciso que isso seja muito genérico, mas basta colocar, na parte superior, a verificação para ver se está sendo executado como administrador. Se não estiver, quero exibir uma mensagem para dizer isso a eles; se for, quero que continue. Existe uma maneira constante de verificar isso? Não estou querendo iniciar uma nova sessão como administrador, só quero detectar se ela está sendo executada atualmente como administrador
windows
command-line
O canadense Luke REINSTATE MONICA
fonte
fonte
Respostas:
Encontrei isso no Stack Overflow :
fonte
net session >nul 2>&1 && echo Success || echo Failure
. Acho essa sintaxe compacta mais conveniente.Isso verifica o alto nível de integridade. (funciona para Windows Vista e superior)
fonte
whoami
está ausente no XP.Muitas, muitas respostas para essa e várias outras perguntas no SE ( 1 , 2 , 3 , para citar algumas), todas deficientes dessa maneira ou de outra, mostraram claramente que o Windows não fornece um utilitário interno confiável . Então, é hora de lançar o seu próprio.
Sem mais hacks sujos:
Compile o programa a seguir (instruções a seguir) ou obtenha uma cópia pré-compilada . Isso precisa ser feito apenas uma vez, para que você possa copiar
.exe
todos os lugares (por exemplo, ao lado do Sysinternals Suite ).O código funciona no Win2k + 1 , com e sem UAC, domínio, grupos transitivos, seja o que for - porque usa da mesma maneira que o próprio sistema ao verificar as permissões.
chkadmin
imprime "Admin" ou "Non-admin" e define o código de saída como 0 ou 1, respectivamente. A saída pode ser suprimida com o/q
interruptor.chkadmin.c
:Para compilar, execute no prompt de comando do Windows SDK:
(se você estiver usando o VS2012 +, serão necessários mais ajustes se precisar segmentar 2k / XP )
O método é cortesia de /programming/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908
1 O MSDN afirma que as APIs são XP +, mas isso é falso.
CheckTokenMembership
é 2k + e o outro é ainda mais antigo .fonte
A maneira mais limpa de verificar os privilégios de administrador usando um script CMD, que eu encontrei, é algo como isto:
Esse método usa apenas os recursos internos do CMD.exe, portanto deve ser muito rápido. Ele também verifica os recursos reais do processo, em vez de verificar SIDs ou participações em grupos, para que a permissão efetiva seja testada. E isso funciona desde o Windows 2003 e XP. Processos normais do usuário ou processos não elevados falham na análise do diretório, onde processos administrativos ou elevados são bem-sucedidos.
Este teste falhará se a
Everyone
,BUILTIN\Users
ou outro grupo semelhante é dada a permissão de leitura para systemprofile. É verdade que essa é uma configuração não padrão, exceto em máquinas configuradas como controladores de domínio do Windows, que concedem direitos de leitura / execução de 'NT AUTHORITY \ Authenticated Users' ao perfil do sistema.fonte
verify
. Eu costumo usarcd .
(cd space dot) que define o nível de erro como 0, não produz saída e também é útil para criar um arquivo de tamanho zero viacd . >somefile
. Dito isso, testei 'dir' no Windows 2000, XP, Vista, 2003, 2008, 2012, 7, 8 e 10. Para todos esses 'dir', o nível de erro será zerado para 0 em caso de sucesso, se ele tiver sido definido antes da instalação. 'dir'. Portanto, não sei por que o william usou 'Verifique' para limpar primeiro o nível de erro.