将所有列及其数据值导出到列表中

时间:2016-01-07 13:33:17

标签: csv powershell sharepoint sharepoint-2010

我必须导出特定SharePoint列表中的所有列以及列中包含的数据。

我目前能够获取所有列名但不能获取数据。需要帮助。以下是我的代码。

$url = "$url"
$listName = "$list"
$path ="c:\ColumnsOfList.csv"

$web = Get-SPWeb $url
$list = $web.Lists.TryGetList($listName)
$list.ContentTypes | % { $_.FieldLinks } | select Name |  Export-Csv -Path $path

1 个答案:

答案 0 :(得分:2)

有几种不同的方法可以做到这一点,但要理解的重要一点是,您需要遍历列表中的项目(而不仅仅是通过列表中的字段)。

$url = "$url"
$listName = "$list"
$path ="c:\ColumnsOfList.csv"

$web = Get-SPWeb $url
$list = $web.Lists.TryGetList($listName)
$fields = $list.ContentTypes | %{ $_.FieldLinks } | select Name
$items = @() #array to store objects representing list items
$list.items | %{ 
    $item = $_; 
    $hash = @{}; #hash table to store field name-value pairs
    $fields | %{ $hash[$_.Name] = $item[$_.Name]  }; 
    $items += new-object psobject -Property $hash }
$items | Export-Csv -Path $path

请注意,此方法会尝试获取列表中的所有项目,这可能效率很低,如果列表超过列表视图阈值(默认情况下限制为5000项),则会失败。

要访问已过滤的列表项子集,请使用适当的CAML创建一个SPQuery对象以选择所需的项目,然后调用$list.GetItems($spquery)而不是直接访问$list.items属性。

  

编辑:更新了代码以导出列的显示名称而不是内部名称

$url = "$url"
$listName = "$list"
$path ="c:\ColumnsOfList.csv"

$web = Get-SPWeb $url
$list = $web.Lists.TryGetList($listName)
$fields = $list.ContentTypes | %{ $_.FieldLinks } | select Name, DisplayName
$items = @() #array to store objects representing list items
$list.items | %{ 
    $item = $_; 
    $hash = @{}; #hash table to store field name-value pairs
    $fields | %{ $hash[$_.DisplayName] = $item[$_.Name]  }; 
    $items += new-object psobject -Property $hash }
$items | Export-Csv -Path $path