我使用脚本来导出活动目录中具有确定的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'成员的用户
答案 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对象类型中的那些类型的查询。