使用WMI将远程SID转换为用户名

时间:2017-01-31 18:13:37

标签: powershell wmi remote-access wmic sid

我正在使用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吗?

2 个答案:

答案 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 '\'
    }
}