Powershell - 为所有用户获取安全类型的 ADGroup

Powershell - Get-ADGroup of type Security for All Users

我从许多网站上获取了代码片段,几乎有我需要的。唯一的问题是我只需要 return GroupCategory 安全组。

我正在尝试在 Active Directory 中搜索 OU,return 用户,然后列出他们所属的每个安全组,按名称排序(包括用户和他们所属的组)。将其输出到 txt 文件

$FilePath = 'C:\'
$EndDate = (Get-Date).tostring("yyyyMMdd")
$FileName = 'GroupMembership By User - ' + $EndDate + '.txt'

$Users=Get-ADUser -Filter * -Properties * -SearchBase "OU=My Accounts,DC=DOMAIN,DC=COM" | sort-object -property Name

ForEach ($User in $Users) {
$GroupMembership = ($User.memberof | foreach-object {(Get-ADGroup $_).Name ;}) -join ',';
$User.Name + ',' + $GroupMembership  #|out-file -append "$FilePath$FileName"
}

#| Where-Object {$_.GroupCategory -EQ "Security"}

我的输出以逗号分隔并在每一行按用户名排序,但我似乎无法对组进行排序(总体上不太重要),也无法将组列表排除在分发组之外(必须有)。最后一行被注释掉,将 return 只是安全组,但无论我把它放在哪里,它都不起作用或命令失败。

TIA

那这个怎么样。你在评论中有逻辑。我想你不确定把它放在哪里。我还删除了创建 $GroupMembership

时的一些冗余
$Users | ForEach-Object {
    $GroupMembership = $_.memberof | Get-ADGroup | Where-Object{$_.GroupCategory -eq "Security"} | Sort-Object Name | Select -ExpandProperty Name
    (@($_.Name) + $GroupMembership) -join ","
} | Add-Content $FilePath$FileName

为了尝试在没有错误的情况下使用管道,我更改了您的 ForEach 构造。这样我们就可以在管道末端添加 Add-Content

$GroupMembership 填充了 Get-AdGroup 的输出,我们使用您的 Where-Object 子句删除了通讯组*。一个简单的排序和展开就只剩下组名了。

* 我必须进行试验,但我不确定这对启用邮件的安全组有何反应。