2014-01-22 67 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”)在中间。最后两行提供了打印结果的例子&

相关问题