获取 Windows 上当前登录的用户

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

示例:我以用户 TestUser 身份登录。我将以名为 AdminUser 的管理员身份从该用户运行命令行。

是否可以从该命令行确定当前登录的 TestUser 的名称?

我已经有一个始终以 AdminUser 身份运行的计划任务,但在其操作(批处理文件)中,我需要当前登录用户的名称。

有什么想法吗?

windows batch-file scripting cmd scheduler
4个回答
7
投票

据我所知,这实际上是不可能的。 不过,根据您对用户环境的了解程度,以下可能是一种解决方法:

命令

qwinsta

将为您提供计算机的会话列表。在这些会话中,一个将是活动会话,因此,如果在交互式会话中使用该程序,则该程序基本上将包含您所描述的“登录用户”(实际上要复杂得多,可能有许多用户登录但只有一个可以处于活动状态,我只是希望您足够了解程序的使用场景以利用它)。您可以解析输出并使用该用户名。

当然,这是一个肮脏的黑客行为,它假设在任务运行时用户没有机会改变。

虽然我选择了 qwinsta.exe,因为它是一种非常基本的方法,不需要 API 调用,或者我仍然不确定 CMD 是否有足够的解析功能来为您获取必要的信息。


4
投票

%username%
变量包含..好吧,用户名。

echo/%username%

编辑

正如你所说,因为你处于计划任务中,所以你可以从Windows注册表中获取用户名

@echo off
for /f "tokens=3" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData\1 /v LoggedOnUserName') do (
set "user=%%a")
set "user=%user:.\=%"
echo/%user%

现在

%user%
变量包含登录的用户名。


2
投票

这是使用批处理文件实现此目的的快速方法,即以下命令:

for /F "tokens=1,2" %%i in ('qwinsta /server:%COMPUTERNAME% ^| findstr "console"') do set tempVar=%%j

echo %tempVar%
将显示实际登录的用户。而不是启动批处理文件的用户。


0
投票

查找用户的一个简单方法是使用 %USERNAME% 变量。 这是一个例子:

echo Your username is %USERNAME%
© www.soinside.com 2019 - 2024. All rights reserved.