PowerShell如何判断本地组成员为用户还是组?
如何在Get-LocalGroupMember2输出中区分成员是用户还是组?
针对原生Get-LocalGroupMember的问题,你已经实现了替代函数Get-LocalGroupMember2,要在输出中区分成员类型(用户/组),可以通过读取ADSI对象的SchemaClassName属性来判断,同时调整输出字段匹配需求格式。
修改后的完整函数代码
function Get-LocalGroupMember2 { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$Groupname ) $group = [ADSI]"WinNT://$env:COMPUTERNAME/$Groupname" $members = $group.Invoke('Members') | ForEach-Object { $adsiObj = [adsi]$_ $path = $adsiObj.path Write-Host ">>> $path" [pscustomobject]@{ Computer = $env:COMPUTERNAME Domain = $(Split-Path (Split-Path $path) -Leaf) Name = $(Split-Path $path -Leaf) Type = switch ($adsiObj.SchemaClassName) { 'User' { 'User' } 'Group' { 'Group' } default { 'Unknown' } } } } return $members }
关键修改说明
- 将
([adsi]$_)存入变量$adsiObj,避免重复转换,方便调用属性 - 新增
Type字段:通过switch判断SchemaClassName的值,用户对象的该属性为User,组对象为Group,额外添加Unknown分支处理特殊情况 - 把原输出字段
User改为Name,匹配你期望的输出表头
示例输出
>>> WinNT://MyDomain/TestUser >>> WinNT://MyDomain/TestGroup Computer Domain Name Type -------- ------ ---- ---- NyComputer MyDomain TestUser User NyComputer MyDomain TestGroup Group
内容的提问来源于stack exchange,提问作者Kawaii-Hachii
相关产品推荐
相关产品推荐

