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

在Windows上获取当前登录的用户,windows,batch-file,scripting,cmd,scheduler,Windows,Batch File,Scripting,Cmd,Scheduler,示例:我以用户TestUser的身份登录。从这个用户,我将以管理员的身份运行一个名为AdminUser的命令行 是否可以从此命令行确定当前登录的TestUser的名称 我已经安排了一个始终以AdminUser身份运行的任务,但在其操作(批处理文件)中,我需要输入当前登录用户的名称 有什么想法吗?%username%变量包含。。嗯,用户名 echo/%username% 编辑 正如您所说的,因为您正在执行计划任务,所以可以从Windows注册表获取用户名 @echo off for /f "tok

示例:我以用户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\1 /v LoggedOnUserName') do (
set "user=%%a")
set "user=%user:.\=%"
echo/%user%

现在
%user%
变量包含记录的用户名。

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

命令

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

当然,这是一个肮脏的黑客行为,它假设在任务的运行期间,用户不可能改变


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

使用批处理文件可以快速实现这一点,可以使用以下命令:

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

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

是的,但这将返回AdminUser,因为他是计划任务的执行者。即使在windows中您以TestUser的身份登录。我尝试了此操作,还使用了whoami命令:)如果存在具有断开会话的用户,则此操作将不起作用。然而,如果dEVIANT能够排除这种情况,那就没有我想象的那么疯狂了。在会话数据中,我有1,2,3个键,其中一个是我的管理员用户,即使我以测试用户身份登录:/@dEVIANT,那么背景键上方的LogonUI键呢?那是你用户的密钥吗?你能澄清一下“当前登录的用户”是什么意思吗?您是否将此限制在控制台上?远程桌面连接算吗?如果这是一个服务器操作系统,您将如何在RDP客户端之间进行选择?不确定,因为目前无法尝试,但是否找到“explorer.exe”help?可能是的副本。谢谢。此解决方案通常有效。但万一我的朋友不在。我会告诉你原因。基本上我只需要在管理员注销时运行批处理文件。因此,我的任务在安全事件4647(注销事件)时触发。所以我测试了你的建议,没有更多的活动会话。我试图通过注册表通过组策略注销脚本执行此操作,但它非常不稳定,对我不起作用。因此,您不需要活动用户,但需要最后一个活动用户?在这种情况下,我会提出另一种解决办法。如果您不能保证没有远程会话,您可以尝试密钥HKLM\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\LastLoggedOnUser这基本上是Windows用于在登录屏幕上显示最后一个用户的密钥。远程会话未保存在那里。。。若你们有他们,我会说写一个程序,在每次登录时用userinfo覆盖一个注册表项或文件,然后查询你们自己的信息