获取当前在Windows上登录的用户

时间:2015-01-22 11:32:35

标签: windows batch-file scripting cmd scheduler

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

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

我已经安排了始终作为AdminUser运行的计划任务,但在其操作(批处理文件)中,我需要指定当前登录的用户。

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

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

命令

qwinsta

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

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

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

答案 1 :(得分: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 :(得分:0)

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

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

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