使用PowerShell将集合保存到csv时发出问题

时间:2016-05-11 16:05:14

标签: csv powershell powershell-v3.0

我有以下powershell代码使用它将结果保存到csv文件但我无法将它们保存在csv文件中。

import numpy as np
my_list = ['foo', 'bar', 'baz', 42]
print list(np.random.permutation(my_list))
# ['bar', 'baz', '42', 'foo']

此脚本提取角色的名称以及与该角色关联的成员。一个角色可以有多个成员。

我尝试了上面的脚本,它导出角色但是在Members字段中,我看到所有角色的字符串“Microsoft.AnalysisServices.RoleMemberCollection”。

如果我不导出到csv,我可以在ps窗口或文本文件中查看成员。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

您只能将可以表示为字符串的值导出到csv文件。 Members是一个可能包含多个RoleMember - 对象的集合对象,因此您需要使用计算属性来访问每个Name内的RoleMember - 属性。如何处理这取决于所需的输出。

您可以将对象Name-property加入单个字符串

$SSASDatabase.Roles |
Select-Object Name, @{n="Members";e={ ($_.Members | % { $_.Name }) -join '; '}} |
Export-Csv C:\dev\psout\test.Csv -NoTypeInformation


Role1,"User1; User2"
Role2,"User3; User4"

或者你可以在csv文件中创建一行"每个成员每行"这通常是我喜欢的,因为它在Excel中过滤更容易。

$SSASDatabase.Roles | ForEach-Object {
    #Store role-reference so we can access it later inside the member-foreach
    $r = $_
    $r.Members | ForEach-Object {
        #Store member-reference so it's available inside Selec-Object
        $m = $_
        $r | Select-Object Name, @{n="Member";e={ $m.Name }}
    }
} | Export-Csv C:\dev\psout\test.Csv -NoTypeInformation


Role1,User1
Role1,User2
Role2,User3
...