【问题标题】:Powershell - Get-ADGroup of type Security for All UsersPowershell - 为所有用户获取安全类型的 ADGroup
【发布时间】:2015-04-17 02:26:54
【问题描述】:

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

【问题讨论】:

    标签: powershell powershell-4.0


    【解决方案1】:

    那么这个怎么样。您在评论中有逻辑。我猜你不知道把它放在哪里。我还删除了创建 $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 子句删除通讯组*。一个简单的排序和扩展只剩下组名。

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

    【讨论】:

    • 谢谢。这非常有效。我的问题肯定是我的 Where-Object 放在哪里,无论它在哪里,我都会不断收到错误。我将不得不查看启用邮件的 sec 组,我没有想到这一点,尽管我们通常不使用它们。
    猜你喜欢
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多