获取 Windows 当前登录的用户
Get currently logged on user on Windows
示例:我以用户 TestUser 身份登录。从这个用户,我将以名为 AdminUser 的管理员身份进入 运行 命令行。
是否可以从此命令行确定当前登录的 TestUser 的名称?
我已经有计划的任务,它总是 运行作为 AdminUser,但在它的操作(批处理文件)中,我需要当前登录用户的名称。
有什么想法吗?
%username%
变量包含..用户名。
echo/%username%
编辑
正如你所说,因为你在计划任务中,你可以从Windows注册表中获取用户名
@echo off
for /f "tokens=3" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData /v LoggedOnUserName') do (
set "user=%%a")
set "user=%user:.\=%"
echo/%user%
现在 %user%
变量包含登录的用户名。
据我所知这是不可能的。
根据您对用户环境的了解程度,以下可能是一种解决方法:
命令
qwinsta
将为您提供计算机的会话列表。在这些会话中,一个将是活动会话,因此如果仅在交互式会话中使用该程序,它将基本上包含您描述的 "logged in user" (实际上要复杂得多,可能有很多用户登录但只有一个可以激活,我只希望你对你的程序的使用场景有足够的了解以利用它)。您可以解析输出并使用该用户名。
当然这是一个肮脏的 hack,它假设在您的任务 运行 时间内用户没有机会改变。
虽然我选择了 qwinsta.exe 因为它是一种非常基本的方法,不需要 API 调用或其他东西我仍然不确定 CMD 是否具有足够的解析能力来获取必要的信息给你。
这是使用批处理文件实现此目的的一种快速方法,即此命令:
for /F "tokens=1,2" %%i in ('qwinsta /server:%COMPUTERNAME% ^| findstr "console"') do set tempVar=%%j
echo %tempVar%
将显示实际登录的用户。不是启动批处理文件的用户。
示例:我以用户 TestUser 身份登录。从这个用户,我将以名为 AdminUser 的管理员身份进入 运行 命令行。
是否可以从此命令行确定当前登录的 TestUser 的名称?
我已经有计划的任务,它总是 运行作为 AdminUser,但在它的操作(批处理文件)中,我需要当前登录用户的名称。
有什么想法吗?
%username%
变量包含..用户名。
echo/%username%
编辑
正如你所说,因为你在计划任务中,你可以从Windows注册表中获取用户名
@echo off
for /f "tokens=3" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData /v LoggedOnUserName') do (
set "user=%%a")
set "user=%user:.\=%"
echo/%user%
现在 %user%
变量包含登录的用户名。
据我所知这是不可能的。 根据您对用户环境的了解程度,以下可能是一种解决方法:
命令
qwinsta
将为您提供计算机的会话列表。在这些会话中,一个将是活动会话,因此如果仅在交互式会话中使用该程序,它将基本上包含您描述的 "logged in user" (实际上要复杂得多,可能有很多用户登录但只有一个可以激活,我只希望你对你的程序的使用场景有足够的了解以利用它)。您可以解析输出并使用该用户名。
当然这是一个肮脏的 hack,它假设在您的任务 运行 时间内用户没有机会改变。
虽然我选择了 qwinsta.exe 因为它是一种非常基本的方法,不需要 API 调用或其他东西我仍然不确定 CMD 是否具有足够的解析能力来获取必要的信息给你。
这是使用批处理文件实现此目的的一种快速方法,即此命令:
for /F "tokens=1,2" %%i in ('qwinsta /server:%COMPUTERNAME% ^| findstr "console"') do set tempVar=%%j
echo %tempVar%
将显示实际登录的用户。不是启动批处理文件的用户。