2017-01-16 153 views
0

字符串我創建了一個紙條,通過所有列表基本上迭代的網站和子網站,並列出了每個文件或項目的權限。出口System.Object的[],在PowerShell中

腳本作品,然而,被寫入到CSV權限(會員+角色),當字符串被寫爲System.Object[],而不是在CSV輸出aproper字符串(如Member: user123 Role: Full Control

輸出示例:

"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" 

下面是腳本:

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 

是否有可能導出System.Object的[]的用戶名作爲STRI在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有更多信息他們。 $ Permission =「Member:」+ $($ roleAssignment.Member.LoginName)+「Role:」+ $($ roleDefinition.Name)謝謝Tim。 –

回答

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'塊 - 加入,「',爲'-join'操作應用到輸出 –

+0

@Andreas但是,感謝CSV中的輸出仍然是一樣的。已更新代碼 – Brian

+0

@ MathiasR.Jessen您可以進一步解釋一下嗎? – Brian

1

有幾種方法可以避免它。

1)使用 - 加入

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

2)輸出字符串和Trim()

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