我是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列表中的可用选项创建它。
答案 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