gpt4 book ai didi

powershell - 如何通过Powershell脚本获取本地用户的组?

转载 作者:行者123 更新时间:2023-12-03 01:18:55 25 4
gpt4 key购买 nike

我可以使用以下脚本获取本地组的成员:

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

同样,如何获取特定用户的组?

最佳答案

为了给我赢得另一个死灵法师徽章的风险,我想提供更多最新信息和更多惯用的代码来回答这个问题。

Get-LocalGroup |
Where-Object { (Get-LocalGroupMember $_).name -eq "$env:COMPUTERNAME\$env:USERNAME" }
$env:USERNAME当然可以用任何其他用户名代替。

在数组中使用像 -eq-match这样的运算符在上面的示例中显得不那么明显,因为它们返回的数组(如果为空,则等于 bool(boolean) 值上下文中的 $false,否则返回 $true)(该运算符应用于每个项目,如果运算符返回 $true,则该项将成为结果数组的一部分:

@(1;2;3) -eq 2  # =>  @(2)
@(1;2;3) -eq 4 # => @()
@(1;2;3) -ge 2 # => @(2;3)

此处发生的Powershell-array-magic的另一个示例是,在不是该数组对象成员的数组对象上调用的方法在该对象的每个项目上均被调用,并且返回值是相应return的数组不是 $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
}
}

关于powershell - 如何通过Powershell脚本获取本地用户的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21280666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com