gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:09:32 24 4
gpt4 key购买 nike

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

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

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

这同样适用于 whoami在提升的批处理脚本中。
QUERY USER给我一个当前登录的所有用户的列表,而不仅仅是我正在寻找的一个用户。

标准用户帐户与管理员帐户可以在保持相同用户环境的同时从用户组 token 提升为管理员组 token 不同,实际上在选择“以管理员身份运行”时加载管理员帐户环境。

有没有办法获取当前事件登录用户名而不是管理员用户名?

最佳答案

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并获得第二个 token 中的余数。管道到 findstr忽略空行。第二 for循环将获得不含空格字符的第一个值。

管道 wmic输出到 powershell比管道到 findstr 更好地清理输出测试,以及第二个 for 的使用不需要循环。
@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 ^|
powershell -noprofile -command "$input.trim()"
') do set "user=%%~B"

echo "%user%"
pause

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

查询用户别名 QUser
@echo off
setlocal

rem Get logon username.
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 的默认选项中获取用户名, 如果 username 包含空格或制表符,则只会获取空格或制表符之前的字符。
  • 在 64 位操作系统上,quser.exe存在于 System32 ,不在 SysWOW64 .一个 32 位 cmd.exe在 64 位操作系统上可能无法识别为命令。

  • 引用:
  • query user
  • Query User / QUSER
  • 关于windows - 使用标准用户帐户在提升的脚本中获取登录用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61397541/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com