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