2014-01-23 36 views
1

我想在windows中獲取本地用戶帳戶的組。如果我們從目錄條目中獲取本地對象,就可以完成此操作。這是通過以下方式通過API實現的:如何通過PowerShell從目錄條目獲取IADSUser本機對象?

DirectoryEntry comp = new DirectoryEntry("WinNT://computername"); 
DirectoryEntry de = comp.Children.Find("account19", "user");  
IADsUser NativeObject = (IADsUser)directoryentry.NativeObject; 

但是如何通過powershell腳本獲取相同的內容?

+0

um ..也許在PowerShell中有另一種方法來完成使用'[ADSI]'的域/本地用戶的任務。你能用'NativeObject'告訴你最終目標是什麼嗎? –

+0

獲取用戶的組。一種方法是獲得所有組。然後他們的成員,並檢查用戶是否是該組的一部分,但這不是有效的。 –

+0

這應有助於: http://stackoverflow.com/questions/4548476/powershell-list-local-users-and-their-groups – Raf

回答

0

您可以使用System.DirectoryServices.AccountManagement namespace中的Microsoft .NET Framework類型獲取本地組成員身份。我編寫了一個簡單的PowerShell高級函數,它將檢索本地用戶帳戶的組成員資格。

注意:因爲我們在UserPrincipal class上使用GetGroups() method,所以此代碼非常有效。你做不是需要得到所有組的列表,然後迭代它們,如以前在評論中所建議的。

function Get-LocalUserGroupMembership { 
    [CmdletBinding()] 
    param (
     [Parameter(ValueFromPipeline = $true)] 
     [string] $Identity = $env:USERNAME 
    ) 

    # Import the System.DirectoryServices.AccountManagement .NET library 
    Add-Type -AssemblyName System.DirectoryServices.AccountManagement; 

    # Get a reference to the local machine's Security Account Manager (SAM) 
    $PrincipalContext = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList ([System.DirectoryServices.AccountManagement.ContextType]::Machine); 
    # Get a reference to a specific user principal, based on its account name 
    $UserAccount = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($PrincipalContext, $Identity); 
    if (!$UserAccount) { 
     throw 'User account could not be found!'; 
    } 

    # Call the GetGroups() method on the UserPrincipal object 
    $GroupList = $UserAccount.GetGroups(); 

    # Output the list of groups 
    Write-Output -InputObject $GroupList; 
} 

Get-LocalUserGroupMembership; 
+0

我試過上述script.I正在以下異常:「未處理異常:System.Management.Automation.RemoteException:用戶帳戶找不到!「 –