我正在尝试为 Get-LocalGroupMember 问题创建一个解决方法,如下所述: https://github.com/PowerShell/PowerShell/issues/2996
读完后,我想出了这个函数来获取本地组中的所有成员:
function Get-LocalGroupMember2 {
[CmdletBinding()]
param
(
[Parameter(Mandatory = $true)]
[string]$Groupname
)
$group = [ADSI]"WinNT://$env:COMPUTERNAME/$Groupname"
$members = $group.Invoke('Members') | ForEach-Object {
$path = ([adsi]$_).path
Write-Host ">>> $path"
[pscustomobject]@{
Computer = $env:COMPUTERNAME
Domain = $(Split-Path (Split-Path $path) -Leaf)
User = $(Split-Path $path -Leaf)
}
}
return $members
}
这是一个示例输出:
>>> WinNT://MyDomain/TestUser
>>> WinNT://MyDomain/TestGroup
Computer Domain User
-------- ------ ----
NyComputer MyDomain TestUser
NyComputer MyDomain TestGroup
现在,我想知道成员是用户还是组。比如:
Computer Domain Name Type
-------- ------ ---- ----
NyComputer MyDomain TestUser User
NyComputer MyDomain TestGroup Group
有人可以帮忙吗?
稍微修改一下,就可以使用每个成员实例的
.Class
属性了:
function Get-LocalGroupMember2 {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string] $Groupname
)
$group = [ADSI]"WinNT://$env:COMPUTERNAME/$Groupname"
$group.Invoke('Members') | ForEach-Object {
$member = [adsi] $_
Write-Host ">>> $path"
[pscustomobject]@{
Computer = $env:COMPUTERNAME
Domain = Split-Path (Split-Path $member.Path) -Leaf
User = Split-Path $member.Path -Leaf
Class = $member.Class
}
}
}