我从许多网站上获取了代码片段,几乎拥有了我需要的内容。唯一的问题是我需要返回GroupCategory Security的组。
我正在尝试在Active Directory中搜索OU,返回用户,然后列出他们所属的每个安全组,按名称排序(用户和他们所属的组)。输出到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"}
我的输出以逗号分隔,并按每行上的用户名排序,但我似乎无法对组进行排序(总体上不太重要),也不能排除组列表以排除通讯组(必须具有)。最后一行注释掉了,只返回安全组,但无论我把它放在哪里,它都不起作用或者命令失败。
TIA
答案 0 :(得分:0)
那么这个怎么样。你在评论中有逻辑。我想你不知道该把它放在哪里。我还删除了创建$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
子句删除了通讯组*。简单的排序和扩展只给我们留下了组名。
* 我必须进行实验,但我不确定这对启用邮件的安全组的反应如何。