我一直在编写一个脚本来运行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
声明的过程?
答案 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