複数のグループに属する有効なメンバーのみを取得しようとしていますが、これを希望する形式で実現する方法がわかりません。現在のスクリプトは次のとおりです。
$GroupList = @('GroupA','GroupB'
)
$Groupusers = @()
foreach ($Groups in $GroupList)
{
$Groupusers += Get-ADGroupMember -Identity $Groups | select @{Name="Groups";Expression={$Groups}},name
}
$Groupusers | Export-Csv -Path "C:\Users\Me\Documents\users.csv" -NoTypeInformation -Encoding Unicode
上記のスクリプトは機能し、私が求めている出力をフォーマットしますが、これには障害のあるユーザーも含まれます。
出力:
グループ名
グループA ユーザー
A グループB ユーザーB
次のスクリプトを試してみましたが、これにより、すべての有効なユーザーが取得されますが、上記のスクリプトのような形式ではありません。
$groupname = @('GroupA', 'GroupB')
$Groupusers=@()
foreach ($group in $groupname)
{
$Groupusers += Get-ADGroupMember -Identity $group | ? {$_.objectclass -eq "user"}
}
$result= @()
foreach ($activeusers in $Groupusers)
{
$result += (Get-ADUser -Identity $activeusers | ? {$_.enabled -eq $true} | select Name, Enabled)
}
$result
有効なユーザーのみで上記の出力を実現するにはどうすればよいですか? ありがとうございます。
答え1
最初のスクリプトのフォーマットを維持したい場合は、これが有効になります。有効になっている $groupusers のみを保持する 2 番目の配列を作成し、そのサブセットのみを出力ファイルに書き込むだけです。
$GroupList = @('GroupA','GroupB')
$Groupusers = @()
foreach ($Groups in $GroupList)
{
$Groupusers += Get-ADGroupMember -Identity $Groups | select @{Name="Groups";Expression={$Groups}},name
}
$activeusers = @()
foreach ($user in $Groupusers)
{
$n = $user.name
$props = get-aduser -filter "name -eq '$n'" | select samaccountname, enabled
if ($props.enabled)
{
$activeusers += $user
}
}
$activeusers | Export-Csv -Path "C:\Users\Me\Documents\users.csv" -NoTypeInformation -Encoding Unicode