方法具有不同属性导出的对象?(Method to export objects with varyi

2019-11-01 05:31发布

我打了一个共同的问题,我最近的脚本,并决定把它扔到野外,看看其他人怎么处理这个问题。

TL;博士; 我要导出具有不同数量的属性的对象。 例如; 加工对象物1可以具有3个IP地址,但对象2具有7个的IP地址。

我已经发展到创建自定义属性的新对象,然后这些对象注入到一个数组作为我的捕结果的方法 - 高兴地听到,如果有更好的方法,但是这是我的风格。 我已经尝试了一些出口/输出文件的方法都无济于事时,我想捕捉和输出存储在类似的Excell阅读 - 文物被显示在列表格式输出到屏幕上时,这种方法效果100% 。

以下是建立一个对象并存储了我的例子(代码的功能在这里并不重要 - 只要它产生的结果):

add-pssnapin Quest.ActiveRoles.ADManagement
$Groups = get-qadgroup AmbigousGroupNameHere-
$UserInfo = @()

ForEach ( $Group in $Groups ) {
    $CurrentGroupMembers = get-qadgroupmember $Group
    write-host "Processing group:" $Group
    ForEach ( $GroupMember in $CurrentGroupMembers ) {
        If ( $GroupMember.type -eq "User" ) {
            $counter = 1
            write-host "Processing member:" $GroupMember
            $UserObject = get-qaduser $GroupMember | select SamAccountName,FirstName,LastName

            $objUserInfo = New-Object System.Object
            $objUserInfo | Add-Member -MemberType NoteProperty -Name SamAccountName -Value $UserObject.SamAccountName
            $objUserInfo | Add-Member -MemberType NoteProperty -Name FirstName -Value $UserObject.FirstName
            $objUserInfo | Add-Member -MemberType NoteProperty -Name LastName -Value $UserObject.LastName

            $GroupMembership = get-qadgroup -ContainsMember $GroupMember | where name -like "AmbigousGroupNameHere-*"

            ForEach ( $GroupName in $GroupMembership ) {
                $objUserInfo | Add-Member -MemberType NoteProperty -Name CtxGroup$counter -Value $GroupName.SamAccountName
                $counter++
            }
            $UserInfo += $objUserInfo
        } else {
            write-host "This is a group - we are ignoring it."
        }
    }
}

$UserInfo | Export-Csv UsersOutput.csv -NoType

从上面的 - 你可以看到我通过各1组缩放对象属性名称。 CtxGroup$counter可以让我缩放对象正确的组数每个用户拥有的。 证实了这一点默认输出到屏幕上时的伟大工程。 对象是上市,我可以看到一个新的属性为每个为该用户匹配组。

现在的问题。 当我export-csvout-file的文件与足够头基于关闭所述第一对象产生-因此它创建基于属性所述第一对象具有的量的标题。 因此,可以说第一个用户有3个匹配组,它会创建标题CtxGroup1, CtxGroup2, CtxGroup3 。 大! 没有。

如果下一个用户有5个匹配组-只有前三种都包含在输出和另外2被丢弃,因为我们没有标题为CtxGroup4, CtxGroup5

在地球上如何别人面对呢?

边注; 我考虑创建我的第一个对象作为一个虚拟与对象(因此标题),但好了大量的 - 这是不冷静,真的让我觉得很低效。

Answer 1:

你可以得到你想要订购什么$UserInfo通过性能的数值列,这是可以做到的,但它不是那么简单,你的情况我想补充另一个propertie与群体的数量增加:

...
ForEach ( $GroupName in $GroupMembership ) {
                $objUserInfo | Add-Member -MemberType NoteProperty -Name CtxGroup$counter -Value $GroupName.SamAccountName
                $counter++
            }
$objUserInfo | Add-Member -MemberType NoteProperty -Name NbCtxGroup -Value ($counter - 1)
$UserInfo += $objUserInfo
...

然后降序排列在这propertie数组:

$UserInfo | Sort-Object -Property NbCtxGroup -Descending | Export-Csv .\F.csv

这不是那么好,但它会做的伎俩。

看一下 :

$objUserInfo.psobject.Properties | Measure-Object


文章来源: Method to export objects with varying properties?