2017-01-16 28 views
0

基本的にサイトとそのサブサイトのすべてのリストを繰り返し処理し、各ドキュメントまたはアイテムのアクセス許可を一覧表示するスクリプトを作成しました。System.Object []をPowerShellの文字列にエクスポート

:CSVへのアクセス権(メンバー+役割を)書かれているとき

スクリプトは、しかし、文字列ではなく、CSV出力におけるaproper文字列のSystem.Object[](例えばMember: user123 Role: Full Control

サンプル出力として書き込まれます作品

Add-PSSnapin Microsoft.SharePoint.PowerShell 

function Get-DocInventory([string]$siteUrl) { 
$site = New-Object Microsoft.SharePoint.SPSite $siteUrl 

    $i = 0; 
foreach ($web in $site.AllWebs) { 

    $count = $site.AllWebs.Count 
    foreach ($list in $web.Lists) { 

    if ($list.BaseType -ne “DocumentLibrary”) 
    { 
     continue 
    } 

foreach ($item in $list.Items) { 
$data = @{ 
      "Web Application" = $web.ToString() 
      "Site" = $site.Url 
      "Web" = $web.Url 
      "list" = $list.Title 
      "Item URL" = $item.Url 
      "Item Title" = $item["Title"] 
      "Item Created" = $item["Created"] 
      "Item Modified" = $item["Modified"] 
      "File Size" = $item.File.Length/1KB 
      "Permissions" = foreach($roleAssignment in $item.RoleAssignments) 
      { 

       $Permission = "" 

       foreach($roleDefinition in $roleAssignment.RoleDefinitionBindings) 
       { 
         $Permission = $(foreach($roleAssignment in $item.RoleAssignments){$roleAssignment} 
         { 
          "Member: " + $roleAssignment.Member.LoginName + " Role: " + $roleDefinition.Name + " " 
         } -join ',') 

         $Permission 
         Write-Progress -activity "Working" -status "Checked Sub-Site $i of $count" -percentComplete (($i/$count)/100)      

       } 

     } 


} 



New-Object PSObject -Property $data 
} 
} 
    $web.Dispose(); 
}    

    $i++ 


    $site.Dispose() 
} 
<# Get-DocInventory "https://#####.####.###.##/" | Out-GridView #> 
Get-DocInventory "https://#####.####.###.##/" | Export-Csv -NoTypeInformation -Path C:\Users\livob002-lap\Desktop\Permissions-FinanceIntranet.csv 

はようSTRIのSystem.Object []のユーザー名をエクスポートすることが可能です:

"Common Hover Panel Actions","https://#######.####.###.##","https://######.######.#####.####","System.Object[]","       Ministry for Finance","Master Page Gallery","12/22/2015 8:34:39 AM","_catalogs/masterpage/Display Templates/Search/Item_CommonHoverPanel_Actions.js","12/22/2015 8:34:39 AM","6.2763671875" 

以下のスクリプトですCSVには?名前はGridViewに表示されるように表示されます。

+0

あなたが部分式を試してみましたか? https://blogs.technet.microsoft.com/stefan_stranger/2013/09/25/powershell-sub-expressions/およびhttp://stackoverflow.com/questions/26984637/powershell-variable-syntax-a more information onそれら。 $ Permission = "Member:" + $($ roleAssignment.Member.LoginName)+ "Role:" + $($ roleDefinition.Name)ありがとう、ティム。 –

答えて

2

foreach文は配列を返し、そうライン

"Permissions" = foreach($roleAssignment in $item.RoleAssignments) 

が "アクセス許可" キーへのSystem.Arrayを割り当てます。 System.ArrayのToString()メソッドは、System.Object []を返します。

-join演算子を使用すると、文字列配列を文字列に "変換"できます。次のように動作する可能性があります。

"Permissions" = foreach($roleAssignment in $item.RoleAssignments) 
{ 
    ... 
} -join ', ' 
+2

'foreach'ブロックを '$(foreach($ item in $ list){$ item})の部分式で囲む必要があります。' --join'演算を出力に適用するにはjoin '、'' –

+0

@アンドレアスしかし、CSVの出力はまだ同じです。アップコード – Brian

+0

@ MathiasR.Jessen親切に説明できますか? – Brian

1

これを回避する方法はいくつかあります。

アウト文字列-join

[pscustomobject]@{ 
    Value = (@(1,3,5,6) -join ',') 
} | Export-Csv -notype output.csv 

2)を使用して

1)及び(トリム)

[pscustomobject]@{ 
    Value = (@(1,3,5,6) | Out-String).Trim() 
} | Export-Csv -notype output.csv 
関連する問題