从Powershell中的Sharepoint获取FieldLookupValue

时间:2017-10-25 15:17:45

标签: powershell sharepoint csom

在网上看到我想出了这两个函数来使用这个3 DLL与powershell请求Sharepoint:

Microsoft.SharePoint.Client.dll
Microsoft.SharePoint.Client.Taxonomy.dll
Microsoft.SharePoint.Client.Runtime.dll

此功能用于从列表中获取所有项目

Function Get-ListItems([Microsoft.SharePoint.Client.ClientContext]$Context, [String]$ListTitle) {
    $list = $Context.Web.Lists.GetByTitle($listTitle)
    $qry = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery()
    $items = $list.GetItems($qry)
    $Context.Load($items)
    $Context.ExecuteQuery()
    return $items
}

这一个工作清单:

Function getChangeListsFromSharepoint(){
    $context = New-Object Microsoft.SharePoint.Client.ClientContext($Url)
    $items = Get-ListItems -Context $context -ListTitle $listName 
    foreach($item in $items)
    {
        /** Working HERE **/
    }
    $context.Dispose()
}

现在,当我使用Write-Host $item.Fields显示所有项目内容时,我有类似这样的内容:

[Title,"blabla"]
...
[SpecialField,Microsoft.SharePoint.Client.FieldLookupValue[]]
[OtherField,Microsoft.SharePoint.Client.FieldLookupValue]

我正在尝试获取SpecialField和OtherField的值。为此,我正在使用$item["SpecialField"].LookupValue。我没有问题。但是当我在OtherField上执行此操作时,该值为空。如果我尝试使用$item["OtherField"].LookupID,则该值不为空且我有一个ID。如何获得此ID背后的价值? FieldLookupValue[]FieldLookupValue之间的区别是什么?

2 个答案:

答案 0 :(得分:1)

FieldLookupValue[]是一个多值查找列。

它将属性Allow multiple values设置为true并包含一系列项目。

enter image description here

所以,$item["OtherField"].LookupValue在这里不起作用,你需要迭代它,如下所示:

#multi-value lookup
$mvLookup = [Microsoft.SharePoint.Client.FieldLookupValue[]] $item["OtherField"]        

$mvLookup |% { "Lookup Value: $($_.LookupId):$($_.LookupValue)" }

导致如下值:

enter image description here

FieldLookupValue是单值查找列。它将Allow multiple values设置为false并包含单个项目。因此,$item["SpecialField"].LookupValue将在此处运作

答案 1 :(得分:0)

所以解决方案很简单:我的用户没有权利探索(字段)列表,因为它来自(共享点)列表,因为它没有任何权利。奇怪的是,在网站上,价值是可见的,但在使用PowerShell时并非如此。