Windows XP机器:
reg query "\\COMPUTER_NAME\HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\WinLogon" /v DefaultUserName
输出:DefaultUserName REG_SZ ajstepanik
Windows 7计算机
reg query "\\COMPUTER_NAME\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI" /v LastLoggedOnUser
输出:LastLoggedOnUser REG_SZ GHS_NTDOMAIN\ajstepanik
我想知道是否有可能减少这一点,所以我会留下GHS_NTDOMAIN\ajstepanik
...或者甚至更好,如果我能得到用户名,在这个例子中是ajstepanik
提取名称并存储它的原因是,我可以将其删除并插入其他命令。
编辑其他帮助(win7):
$reg1 = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $tag1)
$key1 = $reg1.OpenSubKey('Microsoft\Windows\CurrentVersion\Authentication\LogonUI')
$user1 = $key1.GetValue('LastLoggedOnUser') -replace '^.*?\\'
echo $user1
返回错误:
You cannot call a method on a null-valued expression.
At C:\Users\ajstepanik\Desktop\test.ps1:30 char:1
+ $user1 = $key1.GetValue('LastLoggedOnUser') -replace '^.*?\\'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
答案 0 :(得分:2)
我完全删除reg.exe
并按如下方式读取远程注册表:
$rhost = 'COMPUTER_NAME'
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $rhost)
$key = $reg.OpenSubKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon')
$user = $key.GetValue('DefaultUserName') -replace '^.*?\\'
这是一种更简洁的方法,因为GetValue
已经产生了实际值。在用它做事之前,你不必用其它字符串解析它。
答案 1 :(得分:1)
看起来很简单:
(reg query "\\%tag%\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI" /v LastLoggedOnUser).split('\')[1]
它会给你一个字符串。只需将其拆分为反斜杠即可。并采取第二个元素。
答案 2 :(得分:1)
您可以使用Microsoft .NET Framework类型远程查询注册表,并获取对象结果。查看PowerShell的远程注册表模块:http://archive.msdn.microsoft.com/PSRemoteRegistry
话虽这么说,你可以解析上面命令的输出,如下所示:
$Output = reg query "\\%tag%\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI" /v LastLoggedOnUser
$Output -join '' -match '\w+\\\w+$';
$matches[0];
如果您想更进一步,可以通过正则表达式“命名组”解析域名和用户名,如下所示:
$output -join '' -match '(?<domain>\w+)\\(?<username>\w+)$';
$matches.username;
$matches.domain;