How do I get current logged in user name when running a batch file as administrator
It runs fine when the current user has local admin privileges, but for users who aren't I have to enter the domain administrator password for the changes to take place.
Com o exemplo abaixo, basta definir uma variável com as variáveis ambientais como você já tem em sua lógica de comando ICACLS e, em seguida, usar essa variável para especificar a conta para conceder as permissões aplicáveis passando-a para um CALL rotina.
@ECHO OFF
SET Identity=%userdomain%\%username%
CALL :ICACLS "%Identity%"
GOTO EOF
:ICACLS
runas /user:MYDOMAIN\USER icacls "program files directory" /grant %~1:F
GOTO EOF
Se você tiver problemas
Se você estiver executando o cmd.exe com o RUNAS e determinar que as variáveis %userdomain%\%username%
não definem (ou listem) os valores esperados de que você precisa use para os comandos ICACLS funcionarem conforme o esperado, em seguida, execute os comandos abaixo em cmd.exe antes de usar a funcionalidade RUNAS para localizar os valores de credenciais atuais registrados no domínio e nome de usuário que você pode usar com os comandos ICACLS para definir as permissões para essa identidade \ security principal .
SET Identity=%userdomain%\%username%
ECHO %Identity%