编辑:
我使用以下代码来解决我的问题;
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
qry = "SELECT * FROM Win32_Process WHERE Name='explorer.exe'"
For Each p in objWMIService.ExecQuery(qry)
p.GetOwner user
UserName = LCase(user)
Next
END OF EDIT
我正在使用为Windows XP设计的现有VBScript,代码如下:
' Get username from registry
UserName = Shell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AltDefaultUserName")
UserName = LCase(UserName)
除非在Windows 7计算机上使用它,否则这种方法非常有效,因为注册表值AltDefaultUserName不存在。
我尝试了以下代码来创建一种获取当前登录用户的通用方法;
UserName = wshNetwork.UserName
UserName = LCase(UserName)
这会返回用户名 system ,可能是因为该脚本是由计算机上运行的服务调用的。
UserName = Shell.ExpandEnvironmentStrings( "%USERNAME%" )
UserName = LCase(UserName)
这会将计算机名返回到最后带有$的值,例如:的 pc123 $
检查Windows 7注册表时,似乎是正确的字符串;
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\LastLoggedOnSAMUser
但这需要删除,因为此处的用户名是:。\ username 或域\用户名 我只需要小写的用户名。
如何检查XP注册表值是否存在,脚本将使用Win7注册表值并在 \ 之前删除所有内容?