我正在使用Invoke-WMIMethod
来标识所有以S-1-5-21
开头的SIDS,就像这样(感谢Mathias R. Jessen):
$Keys = Invoke-WmiMethod -Path $ClassPath -Name EnumKey -ArgumentList 2147483651,''
| Select-Object -ExpandProperty sNames | Where-Object {$_ -match 'S-1-5-21-[\d\-]+$'}
我想使用WMI将这些SID从远程系统转换为远程系统上的用户名。这可以通过WMI或Invoke-WmiMethod
吗?
答案 0 :(得分:0)
您可以从Win32_UserProfile
提供商处获取相同的信息,而不是从注册表中获取。然后,如果文件夹名称足够好,请考虑这样的事情:
$Computer = "ExampleComputer"
Get-WMIObject Win32_UserProfile -Filter "SID like 'S-1-5-21-*'" -ComputerName $Computer |
select SID,@{name=LocalPath;Expression={Split-Path -leaf $_.LocalPath}}
否则Win32_UserAccount
存在,但对于大型域名可能会非常慢。
$Computer = "ExampleComputer"
$SIDs = Get-WMIObject Win32_UserProfile -Filter "SID like 'S-1-5-21-*'" -ComputerName $Computer | select -ExpandProperty SID
$UserAccounts = Get-WMIObject Win32_UserAccount -ComputerName $Computer
foreach ($SID in $SIDs) {
foreach ($Account in $UserAccounts) {
If ($SID -eq $Account.SID) {
$Account
}
}
}
答案 1 :(得分:0)
您可以use the Win32_SID
class获取帐户名称:
foreach($Key in $Keys)
{
$SID = [wmi]"\\$RemoteComputer\root\cimv2:Win32_SID.SID=$Key"
New-Object psobject -Property @{
SID = $Key
Username = $SID.ReferencedDomainName,$SID.AccountName -join '\'
}
}