将选项从Sharepoint列表选择字段导出到csv

时间:2015-11-17 08:57:46

标签: csv powershell sharepoint export

我是SharePoint新手,但我希望使用PowerShell将SharePoint列表中Choice字段中的所有选项导出到.csv文件。

希望文件看起来像:

"Choices"
"Choice1"
"Choice2"
"Choice3"

等等。我需要.csv文件中的选项,我在另一个PowerShell脚本中用于输入。

我尝试过谷歌搜索,但每个结果似乎都是关于如何导出特定选择的结果,如下例所示: http://blog.metrostarsystems.com/2015/06/05/using-powershell-and-the-sharepoint-2013-csom-to-export-list-data/

上下文: 我们维护一份可访问我们测试网站的IP(和相关信息)列表。我们维护列表,然后手动将网站上的IP列入白名单。由于我们目前有20个网站并且数量在不断增加,我们希望自动化它,因此我们只需维护SharePoint列表并“魔术”白名单列出网站上的IP。提到的选择字段是网站,因此当我们添加新网站时,我不想手动更新.txt或csv文件,我只是希望根据SharePoint列表中的可用选项创建它。

2 个答案:

答案 0 :(得分:0)

如果您在SharePoint Web前端服务器上运行脚本,请使用服务器对象模型

如果您未从SharePoint管理外壳运行此操作,则需要首先添加SharePoint管理单元

add-pssnapin "Microsoft.SharePoint.Powershell" -ErrorAction SilentlyContinue

现在您可以访问SharePoint对象模型,您可以获取列表...

$web = get-spweb http://your.web.url
$list = $web.lists["List Title"]

然后到现场......

$field = $list.Fields | where-object {$_.title -eq "Field Title"}
# you can also get the field by its internal name like so:
# $field = $list.Fields.GetFieldByInternalName("FieldInternalName")

然后将字段选项导出为CSV并处理SPWeb对象。

$field.choices | Export-Csv -path "\WhereverYouWant\YourFile.csv" -notype
$web.dispose()

如果您从SharePoint环境外部运行脚本,请使用客户端对象模型

这些方法需要一些C#代码,因为Powershell不能使用期望泛型类型的.NET方法。

它的要点是,您将编写一个静态C#方法,您可以从Powershell调用该方法来获取所需的数据。在这种情况下,将字段模式作为XML获取是获得可用字段选择的好方法。

# Replace these paths with actual, locally accessible paths to the Client and Client.Runtime DLLs
$hive = "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14"
$assemblies = @()
$assemblies += $hive+"\ISAPI\Microsoft.SharePoint.Client.dll"
$assemblies += $hive + "\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" 
$assemblies += "System.Core"

# Code for accessing the SharePoint client object model
$cSharp = @"
using System;
using System.Collections.Generic;
using Microsoft.SharePoint.Client;
namespace SPClient
{
    public class CustomClass{
        public static string GetFieldSchema()
        {
            ClientContext clientContext = new ClientContext(`"http://your/SharePoint/url`");
            List list = clientContext.Web.Lists.GetByTitle(`"List Name Here`");
            Field field = list.Fields.GetByInternalNameOrTitle(`"Field Name Here`");
            clientContext.Load(field);
            clientContext.ExecuteQuery();
            return field.SchemaXml;
        }
    }
}
"@

# Here's the magic where you load the above code and reference the assemblies
Add-Type -TypeDefinition $cSharp -ReferencedAssemblies $assemblies    

# Now you can invoke the custom code to get the XML string
[xml]$schema = [SPClient.CustomClass]::GetFieldSchema()

# Parse the XML as normal
$array = @()
$schema.Field.Choices.Choice | %{ $array += new-object psobject -property @{Choice=$_} }
$array | Export-CSV -notype -path "\WhereverYouWant\YourFile.csv"   

答案 1 :(得分:-1)

检索站点对象然后引用 .choices 属性即可。

对于在 2007 环境下运行的客户端,代码如下。

$spsite=[Microsoft.SharePoint.SPSite]("<site url>")
$rootWebSite=$spsite.RootWeb
$rootWebSite.Fields[0].Choices