查找不是特定GG组成员的用户?

时间:2019-06-03 11:35:31

标签: powershell active-directory-group

我使用脚本来导出活动目录中具有确定的GG组的用户,但我想做相反的事情,我的意思是我要导出不属于该组成员的用户。我附加了我现在执行的部分代码:

$Group = 'GG_LCS_UsersType4'
$Users = Get-ADGroupMember $Group -Recursive -Server $Domain |
         Get-ADUser |
         select SamAccountName, Enabled |
         Export-Csv Temp.csv -NoTypeInformation -Encoding UTF8
Import-Csv Temp.csv |
    Select-Object *, @{Name='Group';Expression={"$Group"}},
        @{Name='Domain';Expression={"$Domain"}} |
    Export-Csv "${Domain}_LicenseControlReport.csv" -NoTypeInformation -Encoding UTF8 -Append

所以现在我想要不是'GG_LCS_UsersType4','GG_LCS_UsersType3','GG_LCS_UsersType2','GG_LCS_UsersType1'成员的用户

1 个答案:

答案 0 :(得分:2)

根据您希望代码的动态程度,有很多方法可以解决此问题。

方案1(用户不在单个组中):

function moveToFirstPlace(['pizza', 'Pasta', 'Burger', 'PiZZa', 'pizzA'],'pizza')

方案2(用户不在多个组中):

$group = 'GG_LCS_UsersType4'
$groupDN = (Get-ADGroup $group).DistinguishedName
$users = (Get-ADUser -filter {objectclass -eq "user"} -properties memberof).where{$_.memberof -notcontains $groupDN}
$users | Select-Object SamAccountName,Enabled |
    Export-Csv Temp.csv -NoTypeInformation -Encoding UTF8

方案1查询该组的专有名称,并将结果存储在$groups = 'GG_LCS_UsersType4', 'GG_LCS_UsersType3', 'GG_LCS_UsersType2', 'GG_LCS_UsersType1' $whereFilter = $groups | Foreach-Object { $g = (Get-ADGroup $_).DistinguishedName "{0} '{1}'" -f '$_.memberOf -notcontains',$g } $whereFilter = [scriptblock]::Create($whereFilter -join " -and ") $users = (Get-ADUser -filter {objectclass -eq "user"} -properties memberof).where($whereFilter) $users | Select-Object SamAccountName,Enabled | Export-Csv Temp.csv -NoTypeInformation -Encoding UTF8 中。 $groupDN用于查询所有AD用户,然后对结果进行过滤,以输出在Get-ADUser属性中没有可分辨名称组的用户。 .MemberOf方法与.where()运算符一起用于查询后过滤。

方案2遍历多个组并创建一个字符串数组,该字符串稍后将在-notcontains方法中使用。即使在这种情况下连接看起来更漂亮,也可以使用格式运算符(.where())创建字符串。每个数组条目仅包含-f。这些条目由$_.memberOf -notcontains <Group Distinguished Name>运算符连接,然后转换为由-and表示的ScriptBlock。由于$whereFilter方法接受ScriptBlock类型作为参数,因此我们只需传递.where()

$whereFilter包含从查询返回的用户对象。我已经选择了您在问题中提供的属性,但是可以轻松地对其进行任意调整。

说实话,查询所有AD用户可能更容易。然后从所有AD用户查询中进行特定的筛选。除了ActiveDirectory模块中缺少健壮命令之外,搜索并不简单的主要原因是您正在数组中搜索值的数组。检查数组中的单个值要简单得多,PowerShell可以本地处理大多数Collection对象类型中的那些类型的查询。