2017-01-31 1 views
1

J'utilise Invoke-WMIMethod pour identifier tous les petits États insulaires en commençant par S-1-5-21, comme tant (merci à Mathias R. Jessen):Utilisez WMI pour convertir un SID distant pour nom d'utilisateur

$Keys = Invoke-WmiMethod -Path $ClassPath -Name EnumKey -ArgumentList 2147483651,'' 
| Select-Object -ExpandProperty sNames | Where-Object {$_ -match 'S-1-5-21-[\d\-]+$'} 

Je veux convertir ces SIDs du système distant noms d'utilisateur sur le système distant utilisant WMI. Est-ce possible via WMI ou Invoke-WmiMethod?

Répondre

0

Plutôt que d'extraire du registre, vous pouvez obtenir les mêmes informations auprès du fournisseur Win32_UserProfile. Ensuite, si le nom du dossier est assez bon, pensez à quelque chose comme ceci:

$Computer = "ExampleComputer" 
Get-WMIObject Win32_UserProfile -Filter "SID like 'S-1-5-21-*'" -ComputerName $Computer | 
    select SID,@{name=LocalPath;Expression={Split-Path -leaf $_.LocalPath}} 

Sinon Win32_UserAccount existe, mais peut être très lent avec un grand domaine.

$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 
     } 
    } 
} 
0

Vous pouvez use the Win32_SID class pour obtenir le nom du compte:

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 '\' 
    } 
} 
+0

J'obtiens 'Impossible de convertir la valeur « \\ \ root \ cimv2: Win32_SID.SID = S-1-5-21 -3201 ... "pour taper" System.Management.ManagementObject ". Erreur: "Paramètre invalide" ' – AlwaysQuestioning