使用powershell将集合保存到csv时出现问题

使用powershell将集合保存到csv时出现问题,csv,powershell,powershell-3.0,Csv,Powershell,Powershell 3.0,我使用下面的powershell代码将结果保存到csv文件中,但我无法将它们保存到csv文件中 [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices") $SSASServerName = "SSAS_ServerName" $SSASDB = "TESTDB" $SSASServer = New-Object Microsoft.AnalysisServices.Server $SSASServer.C

我使用下面的powershell代码将结果保存到csv文件中,但我无法将它们保存到csv文件中

[Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")

$SSASServerName = "SSAS_ServerName"
$SSASDB = "TESTDB"

$SSASServer = New-Object Microsoft.AnalysisServices.Server
$SSASServer.Connect($SSASServerName)
$SSASDatabase = $SSASServer.Databases.Item($SSASDB)
$SSASDatabase.Roles | Select-Object Name, Members | Export-Csv C:\dev\psout\test.Csv
pause
此脚本提取角色的名称以及与该角色关联的成员。一个角色可以有多个成员

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

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


我缺少什么?

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

可以将“对象名称”属性连接到单个字符串

$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
...

您好,Frode,我想在所有行的输出中打印$SSASServerName本身,我应该把这个变量放在哪里?我尝试输入选择列表,但它不起作用。您需要为每种类型的值使用计算属性,而这些值不是
角色
-对象的属性。因此,请尝试
Select Object Name,@{n=“ServerName”e={$SSASServerName},@{n=“Members”;e={($\.Members}%{$\.Name})-加入“;”}
感谢Frode提供的信息!