2016-05-11 9 views
0

以下のpowershellコードを使用して結果をcsvファイルに保存していますが、CSVファイルに保存できませんでした。powershellを使用して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 

このスクリプトは、役割の名前とその役割に関連付けられたメンバーを抽出します。 1つの役割は複数のメンバーを持つことができます。

私は上記のスクリプトを試してみましたが、ロールをエクスポートしますが、メンバフィールドにはすべてのロールの文字列 "Microsoft.AnalysisServices.RoleMemberCollection"があります。

私がcsvにエクスポートしないと、メンバーをpsウィンドウまたはテキストファイルで見ることができます。

何が欠けていますか?

答えて

2

文字列として表すことができる値のみを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ファイルに1行を作ることができるにオブジェクト名、プロパティに参加することができます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 
... 
+0

情報のおかげで多くのFrode! –

+0

こんにちはFrode、私はこの変数を配置する必要がありますすべての行の出力に$ SSASServerName自体を印刷したいと思いますか?私は選択リストに入れようとしましたが、それは働きません。 –

+1

'Roles'オブジェクトのプロパティではないeveyタイプの値に対して計算されたプロパティを使用する必要があります。 @ {n = "$ SSASServerName}"、@ {n = "メンバー"、e = {($ _。メンバー|%{$ _。Name}) - 参加する '; '}} ' –

関連する問題