我正在嘗試使用 PowerShell 提取報告并將其匯出為 CSV。我想獲取一個廣告組,獲取“成員”和“成員”,然后將其匯出。
最終匯出,我希望它看起來像這樣:
Group Name Member Of Member ID Member Name Member Email
Finance Group AD Group 1 User 1 John Smith JSmith@example.com
Finance Group AD Group 2 User 2 Ryan Smith RSmith@example.com
Finance Group AD Group 3 User 3 Amanda Smith ASmith@example.com
Finance Group AD Group 4
Finance Group AD Group 5
我有以下腳本來獲取 AD 組成員和成員:
$Groups = "Finance Group"
$Object = New-Object PSObject
ForEach ($Group in $Groups) {
$MemberOf = Get-ADPrincipalGroupMembership -Identity $Group
ForEach ($Access in $MemberOf.Name) {
$Object | Add-Member -NotePropertyName "Group Name" -NotePropertyValue $Group
$Object | Add-Member -NotePropertyName "Member Of" -NotePropertyValue "$MemberOf
}
}
我只是想制作前 2 列,但是,Add-Member 似乎只是替換了當前值,而且我似乎找不到附加值的方法。之后我將嘗試添加用戶資訊列。我希望“組名”重復的原因是因為我想使用資料透視表將“財務組”分組到其各自的“成員”和“成員”。我是在以正確的方式解決這個問題還是有更好的方法來做到這一點?
提前致謝。
uj5u.com熱心網友回復:
遵循亞伯拉罕的有用答案,只需稍作修改即可獲取用戶的DisplayName和Mail屬性:
$Groups = "Finance Group"
$export = foreach ($Group in $Groups)
{
$thisGroup = Get-ADGroup $Group -Properties MemberOf
$memberOf = $thisGroup.MemberOf
$member = @(Get-ADGroupMember $group).where({
$_.objectClass -eq 'user'
}) | Get-ADuser -Properties DisplayName, mail
$max = [Math]::Max($memberOf.Count, $member.Count)
for ($i = 0; $i -lt $max; $i )
{
[PSCustomObject]@{
GroupName = $thisGroup.Name
MemberOf = $memberOf[$i] -replace '^CN=(.*?)(?<!\\),.*','$1'
MemberID = $member[$i].Name
MemberName = $member[$i].DisplayName
MemberEmail = $member[$i].mail
}
}
}
$export | Export-Csv .... -NoTypeInformation
-replace對MemberOf的使用是因為MemberOfAD Group的屬性是DistinguishedName,這將獲得它們的CN(通用名稱)。有關更多詳細資訊,請參閱https://regex101.com/r/jrbwVb/1。
uj5u.com熱心網友回復:
如果我沒記錯的話,這就是你的意圖:
$Groups = "Finance Group"
foreach ($Group in $Groups)
{
$groupObj = Get-ADGroup -Identity $Group -Properties Members, MemberOf
for ($i = 0; $i -lt [Math]::Max($groupObj.Members, $groupObj.MemberOf; $i )
{
[PSCustomObject]@{
GroupName = $Group
MemberOf = $groupObj[$i].MemberOf
Members = $groupObj[$i].Members # here you can substitute this field, or add new ones, with a new Get-ADUser call -
# to get the display name or other properties.
}
}
}
. . .如在線注釋中所述,您可以將回傳的欄位Get-ADUser替換為對 AD 的呼叫,用于交換顯示名稱或其他欄位。
不幸的是,我的計算機上沒有安裝 AD,也無法再訪問 AD 環境,所以這一切都基于我認為是正確的。我相信這Get-ADGroup也會回傳它的成員財產;所以在這方面只需要一個電話。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392511.html
