Powershell - 适用于所有用户的安全类型的Get-ADGroup

时间:2015-04-16 15:58:20

标签: powershell powershell-v4.0

我从许多网站上获取了代码片段,几乎拥有了我需要的内容。唯一的问题是我需要返回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

1 个答案:

答案 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子句删除了通讯组*。简单的排序和扩展只给我们留下了组名。

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