如何检查组列表以查看是否有成员

时间:2018-06-06 23:20:00

标签: powershell if-statement active-directory

我一直在编写一个脚本来运行CSV文件中的组列表,看看他们是否有任何成员。 最终,我希望让脚本将结果导出到单独的CSV文件中。

$groups = Get-Content 'C:\Users\me\Desktop\testGroups.csv'

foreach ($groups in $groups) {
    $users = Get-ADGroupMember -Identity $groups 
    if (($users | Measure-Object).Count -ne 0) {Write-Output "$groups has something" | Out-File C:\Users\me\Desktop\membersTest.csv -Append}
    Else {Write-Output "$groups has nothing" | Out-File C:\Users\me\Desktop\membersTest.csv -Append} 
} 

返回以下内容:

Length
27
31
41
30
...

我尝试将Write-Output更改为Write-Host,这似乎会返回正确的结果,但它只显示在CMD窗口中。

是否有人能够协助我纠正这些IF Else声明的过程?

2 个答案:

答案 0 :(得分:1)

最终结果是csv,因此构建一个对象并将其导出。

$groups = Get-Content 'C:\Users\me\Desktop\testGroups.csv'

$GroupMemberCount = ForEach ($group in $groups) {
    [PSCustomObhect]@{
       Group = $group
       MemberCount = (Get-ADGroupMember -Identity $group).Count
    }
}
$GroupMemberCount | Out-Gridview
$GroupMemberCount | Export-Csv 'C:\Users\c002568\Desktop\membersTest.csv' -NoTypeInformation

答案 1 :(得分:1)

我有另一个可能有用的项目的类似脚本,我已经修改以匹配您的查询。如果您不需要显示输出,则可以忽略它。

$groups = import-csv groups.csv
$outputFile = New-Item -ItemType file testOutputCSV.CSV -Force

foreach ($group in $groups) {
    [array]$users = Get-ADGroupMember -Identity $group.samaccountname
    if($users.count -ne 0){
        Write-Output "$($group.samaccountname) has something " 
    }
    else {
        Write-Output "$($group.samaccountname) has 0 members" 
    }
    $group.samaccountname +","+$users.count | Out-File $outputFile -Append
}

如果要突出显示控制台上没有任何成员的组以及CSV,您可以将此行放在IF Else块中,根据需要添加更多列。

$group.samaccountname +","+$users.count | Out-File $outputFile -Append

如果您不需要在控制台上显示任何内容,则可以省略IF Else块。

如果您只想为拥有0个成员或非零成员的群组更新CSV,您可以相应地进行修改。

编辑:Masked $ Users为[array],因为单个成员组将返回ADPrincipal