【问题标题】:Get user members of nested AD groups and their info获取嵌套 AD 组的用户成员及其信息
【发布时间】:2025-04-06 20:15:02
【问题描述】:

我有一个 AD 组“Office-Users”,其中不同部门的用户组是成员。 Finance-dep 持有 Finance 中的所有用户,Finance-dep 是 Office-Users 组的成员,依此类推。

我喜欢将嵌套组的所有用户导出到 csv,并为每个用户提供更多信息。

我已经把所有的用户都搞定了:

Get-ADGroupMember Office-Users | where{$_.ObjectClass -eq "Group"} | %{Write $_.Name;Get-ADGroupMember $_}

但它只返回名称、SamAccountName、distinguishedName 等。

我错过了用户的描述、lastLogonTimestamp、whenCreated、Enabled/Disabled,因此我可以查看谁在使用 Office。

有简单的方法吗?

我已经使用它来导出所有用户及其状态/信息,但它不是基于 Office 组。我试过修改它,但我失败了:)

$alist = "Name`tAccountName`tDescription`tLastLogonTimestamp`tCompany`twhenCreated`tAcctEnabled`tGroups`n"
$userlist = Get-ADUser -Filter * -Properties * | Select-Object -Property Name,SamAccountName,Description,lastLogonTimestamp,Company,whenCreated,Enabled,MemberOf | Sort-Object -Property Name
$userlist | ForEach-Object {
$grps = $_.MemberOf | Get-ADGroup | ForEach-Object {$_.Name} | Sort-Object
$arec = $_.Name,$_.SamAccountName,$_.Description,[datetime]::FromFileTime($_.lastLogonTimestamp).ToString('d MMMM yyyy'),$_.Company,$_.whenCreated,$_.Enabled
$aline = ($arec -join "`t") + "`t" + ($grps -join "`t") + "`n"
$alist += $aline
}
$alist | Out-File C:\temp\ADUsers.csv

/金

【问题讨论】:

    标签: windows powershell active-directory


    【解决方案1】:

    把第一行改成这个怎么样?

    Get-ADGroupMember Office-Users | where{$_.ObjectClass -eq "Group"} | %{Write $_.Name;Get-ADUser (Get-ADGroupMember $_) -properties *}
    

    现在您拥有这些组中用户的所有属性,并且可以选择性地显示您关心的任何属性。

    【讨论】:

    • 我得到:Get-ADGroupMember:找不到与参数名称“属性”匹配的参数。
    • @kimr-dk 我认为这是因为右括号应该在 -properties * 之前,这真的是为用户准备的。更新了上面的,你能再检查一下吗?
    • 是的,这样更好,但对于 Office-Users 的每个组成员:“Get-ADUser : 无法将 'System.Object[]' 类型转换为 'Microsoft.ActiveDirectory.Management.ADUser ' 参数 'Identity' 需要。不支持指定的方法。"
    【解决方案2】:

    让这个工作:

    $alist = "Name`tAccountName`tDescription`tLastLogonTimestamp`tCompany`twhenCreated`tAcctEnabled`n"
    $userlist = Get-ADGroupMember Office-Users -Recursive | Get-ADUser -properties * | Select-Object -Property Name,SamAccountName,Description,lastLogonTimestamp,Company,whenCreated,Enabled | Sort-Object -Property Name
    $userlist | ForEach-Object {
    $arec = $_.Name,$_.SamAccountName,$_.Description,[datetime]::FromFileTime($_.lastLogonTimestamp).ToString('HH:mm d MMMM yyyy'),$_.Company,$_.whenCreated,$_.Enabled
    $aline = ($arec -join "`t") + "`t" + "`n"
    $alist += $aline
    }
    $alist | Out-File C:\temp\Office-users.csv
    

    谢谢你:)

    【讨论】:

      最近更新 更多