我可以使用以下脚本获取本地组的成员:
$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 :(得分:1)
虽然编写了一些自动化文件 - 为给定用户获取显式本地组而不遍历所有可用组:
<script>
Your code here
</script>
通过ADSI WinNT(本地)从用户 SomeUserName 获取群组集合,请参阅以下行:$ User.psbase.Invoke(“团体“)在中间。最后两行提供了获取&amp; amp;打印出结果
答案 1 :(得分:1)
冒着为我赢得另一个死灵法师-徽章的风险,我想提供更多最新信息和更多惯用的代码来回答这个问题。
Get-LocalGroup |
Where-Object { (Get-LocalGroupMember $_).name -eq "$env:COMPUTERNAME\$env:USERNAME" }
$env:USERNAME
当然可以用任何其他用户名代替。
在数组中使用-eq
或-match
之类的运算符使数组在上面的示例中显得不那么明显,因为它们返回的数组(如果为空,则等于数组中的$false
)布尔上下文,否则为$true
(如果运算符返回$true
,则运算符将应用于每个项目,并且该项目将成为结果数组的一部分):
@(1;2;3) -eq 2 # => @(2)
@(1;2;3) -eq 4 # => @()
@(1;2;3) -ge 2 # => @(2;3)
此处发生的Powershell- array-magic 的另一个示例是,在不是数组对象的 member 的数组对象上调用的方法在该对象的每个项目上,返回值是不是$null
的各个返回值组成的数组。因此,例如(Get-LocalGroup).sid.value
返回的字符串数组如下:
S-1-5-32-544
S-1-5-32-545
S-1-5-32-546
...
我希望这能以一种易于理解的方式解释(Get-LocalGroupMember $_).name
部分。
所有用户及其组:
Get-LocalUser |
ForEach-Object {
$nm = $_.name
[pscustomobject]@{
Name = $nm
Groups = Get-LocalGroup |
Where-Object { (Get-LocalGroupMember $_).name -contains "$env:COMPUTERNAME\$nm" } |
ForEach-Object name
}
}
答案 2 :(得分: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
}
}
}
直接将用户置于本地组中并不是一种好习惯。您应该将用户放入全局组,然后将全局组放入本地或域本地组,然后将权限分配给这些本地或域本地组。