2014-01-22 72 views
0

我可以使用下面的腳本來獲取本地組的成員:如何通過PowerShell腳本獲取本地用戶的組?

$CompStat = Get-WmiObject win32_computersystem; 
$Localhst = $CompStat.Name; 
$Computer = [ADSI]('WinNT://'+$localhst+',computer'); 
$group = [ADSI]('WinNT://'+$Localhst+'/groupname,group'); 
$Members = @($group.psbase.Invoke("Members")); 
$Members | ForEach-Object {$MemberNames += $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null); 
Write-Output $MemberNames; 
} 

同樣如何獲得特定用戶的羣體?

+0

你只對本地組織感興趣嗎? – websch01ar

+0

是的。我只對本地團體感興趣。 –

回答

0

要獲取用戶所屬的全局組列表,可以使用「net user username/dom」。我不知道直接顯示給定用戶的本地組成員身份的方法,但是可以使用您已寫入的腳本來執行此操作。

對於本地組用戶成員資格,我屠殺在這裏找到一個腳本:Users and Local Groups Report using Powershell?

$user = "insert test username" 

$server="." 
$computer = [ADSI]"WinNT://$server,computer" 

$computer.psbase.children | where { $_.psbase.schemaClassName -eq 'group' } | foreach { 
$groupname = $_.name 
$group =[ADSI]$_.psbase.Path 
$group.psbase.Invoke("Members") | 
foreach { 
    $member = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) 
    if ($member -eq $user) 
    { 
     write-host $groupname 
    } 
} 
} 

這不是一個很好的做法,直接把用戶到本地組。您應該將用戶放入全局組,然後將全局組放入本地或域本地組,然後爲這些本地或本地本地組分配權限。

見例如:http://en.wikipedia.org/wiki/AGDLP

+0

在這個人中,他們獲得所有團體,然後搜索每個成員,但是有沒有更好的方法來獲得用戶羣體? –

+0

我不知道我理解你的問題。我發佈的腳本將爲您指定的用戶查找該用戶所屬的系統上的所有本地組。我以爲那是你要求的。 – MatthewP

+0

我試過這個。但是這也是一個錯誤。但我正在尋找一種有效的方式來獲取用戶組。 –

0

在寫一些自動化來到了這片 - 獲得給定用戶明確的本地組,而無需遍歷所有組可供選擇:從

Get-GroupMembershipLocal([string] $UserName) 
{ 
    $strComputer = $Env:ComputerName 
    $User = [ADSI]("WinNT://$strComputer/$UserName,user") 

    $Groups = @() 
    $User.psbase.Invoke("groups") |foreach ` 
    { 
     $groupname = [string] $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) 
     $Groups += $groupname 
    } 
    return ,$Groups 
} 

$Groups = Get-GroupMembershipLocal "SomeUserName" 
Write-Host ($Groups | Out-String) 

它得到集合用戶SomeUserName通過ADSI WinNT(本地),請參閱行:$ User.psbase.Invoke(「groups」)在中間。最後兩行提供了打印結果的例子&

相關問題