Ao executar um script de linha de comando, é possível obter o nome do usuário atual?
windows
batch-file
Geo
fonte
fonte
Respostas:
Você pode usar a variável username:
%USERNAME%
fonte
Nome do usuário:
Nome do domínio:
Você pode obter uma lista completa de variáveis de ambiente executando o comando
set
no prompt de comando.fonte
Basta usar este comando no prompt de comando
fonte
whoami
, eu recebodesktop-machine\bballdave025
. Existem duas partes, vistas via: 1)echo %USERNAME%
, resultadobballdave025
; 2)echo %USERDOMAIN%
, resultadoDESKTOP-MACHINE
. Acho que se poderia dizer que o 'nome de usuário completo' está disponível viaecho %USERDOMAIN%\%USERNAME%
(esse resultadoDESKTOP-MACHINE\bballdave025
, corresponde ao dewhoami
ignorar maiúsculas e minúsculas) ou mesmo viaecho %USERNAME%@%USERDOMAIN%
, resultadobballdave025@DESKTOP-MACHINE
. Tudo depende do que o usuário (para nós, o OP) precisa , ou seja, se a parte do domínio é importante.Ele deve estar em
%USERNAME%
. Obviamente, isso pode ser facilmente falsificado, portanto, não confie nele para segurança.Dica útil: digite
set
um prompt de comando e listará todas as variáveis de ambiente.fonte
%USERNAME%
é a resposta correta em lote e outra em ambientes Windows.Outra opção é usar
%USERPROFILE%
para obter o caminho do usuário, comoC:\Users\username
.fonte
A resposta depende de qual idioma do "script de linha de comando" você está.
Cmd
No velho
cmd.exe
prompt de comando ou em um.bat
ou.cmd
script, você pode usar o seguinte:%USERNAME%
- Obtém apenas o nome de usuário.%USERDOMAIN%
- Obtém o domínio do usuário.PowerShell
No comando PowerShell alerta ou um
.ps1
ou.psm1
script, você pode usar o seguinte:[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
- Fornece o nome de usuário completo (por exemplo, Domínio \ Nome de usuário). Esse também é o método mais seguro, pois não pode ser substituído pelo usuário, como as outras$Env
variáveis abaixo.$Env:Username
- Obtém apenas o nome de usuário.$Env:UserDomain
- Obtém o domínio do usuário.$Env:ComputerName
- Obtém o nome do computador.fonte
% USERNAME% fornece o nome de usuário do processo em execução no momento. Dependendo de como você está executando seu arquivo em lotes, este não é necessariamente o mesmo que o nome do usuário atual. Por exemplo, você pode estar executando seu arquivo em lotes através de uma tarefa agendada, de um serviço etc.
Aqui está uma maneira mais segura de obter o nome de usuário do usuário conectado no momento, raspando o nome do usuário que iniciou a tarefa explorer.exe:
fonte
Eu uso esse método para escrever arquivos em lotes para teste.
Como você deve incluir a senha em texto sem formatação, se a autenticação for necessária, eu a utilizarei apenas em um ambiente completamente privado onde outros usuários não possam visualizá-la ou se um usuário que visualizar a senha não sofrerá consequências.
Espero que isso ajude alguém.
fonte
Sempre me incomodou como o Windows não possui alguns utilitários de script mais úteis do Unix, como who / whoami , sed e AWK . De qualquer forma, se você quiser algo infalível, obtenha o Visual Studio Express e compile o seguinte:
E apenas use isso no seu arquivo em lotes.
fonte
net config Workstation | find "User name"
whoami
está disponível a partir do Windows Vista.Na maioria dos casos, a variável% USERNAME% será o que você deseja.
No entanto, se você estiver executando um shell cmd elevado,% USERNAME% relatará o nome do administrador em vez do seu próprio nome de usuário. Se você quiser conhecer o último, execute:
fonte
Esta é a principal diferença entre a variável de nome de usuário e o comando whoami:
fonte
Em um contexto padrão, cada usuário conectado mantém um processo explorer.exe: O comando [tasklist / V | find "explorer"] retorna uma linha que contém o proprietário do processo explorer.exe. Com um regex adaptado, é possível obter o requerido valor. Isso também funciona perfeitamente no Windows 7.
Em casos raros, o explorer.exe é substituído por outro programa, o filtro de localização pode ser adaptado para corresponder a esse caso. Se o comando retornar uma linha vazia, é provável que nenhum usuário esteja conectado. No Windows 7, também é possível executar [query session | find ">"].
fonte
No que diz respeito à melhor resposta do BlueBearr (enquanto estou executando meu script em lote com, por exemplo, direitos de sistema), tenho que adicionar algo a ele. Como na linha da versão do idioma do Windows (polonês) que deve ser capturada por "%% a %% b" == "Nome do usuário:" fica REALMENTE COMPLICADO (contém alguns caracteres diacríticos no meu idioma), pulo as 7 primeiras linhas e operar no dia 8.
fonte