访问SharePoint扩展属性

时间:2015-05-12 12:43:02

标签: powershell sharepoint sharepoint-2010 odata powershell-v3.0

我正在访问SharePoint列表中有一个关联的利益相关方实体 - 我很难访问利益相关方的属性。

“主要”内容的属性位于xpath /feed/entry/content/properties/*上。利益相关者的属性位于xpath /feed/entry/link/inline/entry/content/properties/*

假设我在odata查询中包含了利益相关者的名字:

http://server/list/_vti_bin/listdata.svc/TheList?$select=Id,Title,Stakeholder/Name&$expand=Stakeholder

在枚举Feed的属性时,如何引用利益相关者的属性?

使用此代码,未填充Stakeholder.Name属性:

(Invoke-RestMethod -Uri $url -Method Get -UseDefaultCredentials).entry.content.properties | Foreach {
  [PsCustomObject]@{
    Id=$_.Id."#text"; 
    Title=$_.Title; 
    StakholderName=$_.Stakeholder.Name;
  }
}

我是否需要为利益相关者填充第二个PsCustomObject,然后合并“主要”数据?

1 个答案:

答案 0 :(得分:2)

由于/^(\-{3})?(.*)?(\-{3})?[^\n]$/gm符号必须使用单引号字符串文字进行转义,因此查询格式不正确,例如:

$

然后可以检索$url = "http://contoso.intranet.com/_vti_bin/listdata.svc/TheList?`$select=Id,Title,Stakeholder/Name&`$expand=Stakeholder" 值,如下所示:

Stakeholder

修改后的示例

$StakeholderValue = $data.link | where { $_.title -eq "Stakeholder" } | select -Property @{name="Name";expression={$($_.inline.entry.content.properties.Name)}}

或者我建议考虑另一种方法。默认情况下,SharePoint 2010 REST服务以$url = "http://contoso.intranet.com/_vti_bin/listdata.svc/TheList?`$select=Id,Title,Stakeholder/Name&`$expand=Stakeholder" $data = Invoke-RestMethod -Uri $url -Method Get -UseDefaultCredentials -ContentType "application/json;odata=verbose" $data | Foreach { [PsCustomObject]@{ Id = $_.content.properties.Id."#text"; Title = $_.content.properties.Title; Stakeholder = $_.link | where { $_.title -eq "Stakeholder" } | select -Property @{name="Name";expression={$($_.inline.entry.content.properties.Name)}} } } 格式返回结果。我们的想法是以xml格式返回结果。

  

不幸的是Invoke-RestMethod也没有   Invoke-WebRequest可以用于此目的   因为它们都包含PowerShell 3.0 中的错误   Microsoft Connect

     

此特定错误阻止我们使用SharePoint REST服务   由于无法指定json标头,因此结果不能   以Accept格式返回

话虽如此,我建议使用WebClient Class

下面演示了以json格式返回结果的相同示例。请注意,与原始示例相比,获取JSON属性变得更容易:

List Item