使用标准用户帐户在提升权限的脚本中获取登录用户名

问题描述 投票:0回答:1

在Windows 7中运行的批处理脚本中,我有几个IF子句,例如:

IF "%USERNAME%"=="foo" GOTO bar

不幸的是,当我从上下文菜单中运行以“ 以管理员身份运行”提升的批处理脚本时,%USERNAME%始终是管理员的用户名,而不是当前活动登录用户的用户名。

对于提升的批处理脚本中的whoami同样适用。

[QUERY USER为我提供了当前登录的所有用户的列表,而不仅仅是我要寻找的一个用户。

标准用户帐户,与可以在保持相同用户环境的情况下从用户组令牌升至管理员组令牌的管理员帐户不同,当选择了“ 以管理员身份运行”时,实际上会加载管理员帐户环境。

是否有办法获取当前的活动登录用户名而不是管理员用户名?

windows batch-file windows-7 username
1个回答
0
投票

WMIC ComputerSystem获取用户名

@echo off
setlocal

rem Get logon username without the leading "computername\" string.
set "user="

for /f "skip=1 tokens=1,* delims=\" %%A in (
    'wmic computersystem get username ^|findstr /r /v "^$"'
) do for %%C in (%%~B) do if not defined user set "user=%%~C"

echo "%user%"
pause

使用for /f选项skip=1,因为第一行是不需要的UserName标头。用\分隔,因为该值类似于computername\username并获得第二个令牌中的余数。用管道传输到findstr以忽略空行。第二个for循环将获得第一个不含空格字符的值。

使用command /?获得更多帮助。代码中的大多数命令将在命令提示符下显示/?参数的帮助。

查询用户别名QUser

@echo off
setlocal

rem Get logon username without the leading "computername\" string.
set "user="

for /f %%A in ('quser^|findstr /b /c:">"') do set "user=%%~A"

if defined user if "%user:~0,1%" == ">" set "user=%user:~1%"

echo "%user%"
pause

>中的前quser别名 query user)表示当前登录的用户名,而不是管理员的用户名。

在需要时使用%user%代替%username%

注意:由于for /f循环从token=1的默认选项中获取用户名,如果用户名包含空格或制表符,则它将仅获取该空格或制表符之前的字符。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.