Powershell 确定它是 Active Directory 中的用户还是组

问题描述 投票:0回答:1

我正在尝试为 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

有人可以帮忙吗?

powershell
1个回答
0
投票

稍微修改一下,就可以使用每个成员实例的

.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
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.