PowerShell - 创建自定义对象以导出为 CSV
PowerShell - Create Custom Object to Export as CSV
我正在尝试使用 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 似乎只是替换当前值,我似乎找不到附加值的方法。之后我会尝试在用户信息栏中添加。我想要重复“Group Name”的原因是因为我想使用 Pivot Table 将“Finance Group”分组到其各自的“Member Of”和“Members”。我这样做是正确的方法还是有更好的方法来做到这一点?
提前致谢。
如果我没记错的话,这就是你的意图:
$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
returns 也是 属性 的成员;所以在这方面只需要一个电话。
以下 只需稍作修改即可获取用户的 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=(.*?)(?<!\),.*',''
MemberID = $member[$i].Name
MemberName = $member[$i].DisplayName
MemberEmail = $member[$i].mail
}
}
}
$export | Export-Csv .... -NoTypeInformation
在MemberOf上使用-replace
是因为AD组的MemberOf
属性是DistinguishedName,这将得到他们的 CN(通用名称)。有关详细信息,请参阅 https://regex101.com/r/jrbwVb/1。
我正在尝试使用 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 似乎只是替换当前值,我似乎找不到附加值的方法。之后我会尝试在用户信息栏中添加。我想要重复“Group Name”的原因是因为我想使用 Pivot Table 将“Finance Group”分组到其各自的“Member Of”和“Members”。我这样做是正确的方法还是有更好的方法来做到这一点?
提前致谢。
如果我没记错的话,这就是你的意图:
$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
returns 也是 属性 的成员;所以在这方面只需要一个电话。
以下
$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=(.*?)(?<!\),.*',''
MemberID = $member[$i].Name
MemberName = $member[$i].DisplayName
MemberEmail = $member[$i].mail
}
}
}
$export | Export-Csv .... -NoTypeInformation
在MemberOf上使用-replace
是因为AD组的MemberOf
属性是DistinguishedName,这将得到他们的 CN(通用名称)。有关详细信息,请参阅 https://regex101.com/r/jrbwVb/1。