在网上看到我想出了这两个函数来使用这个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
之间的区别是什么?
答案 0 :(得分:1)
FieldLookupValue[]
是一个多值查找列。
它将属性Allow multiple values
设置为true并包含一系列项目。
所以,$item["OtherField"].LookupValue
在这里不起作用,你需要迭代它,如下所示:
#multi-value lookup
$mvLookup = [Microsoft.SharePoint.Client.FieldLookupValue[]] $item["OtherField"]
$mvLookup |% { "Lookup Value: $($_.LookupId):$($_.LookupValue)" }
导致如下值:
FieldLookupValue
是单值查找列。它将Allow multiple values
设置为false并包含单个项目。因此,$item["SpecialField"].LookupValue
将在此处运作
答案 1 :(得分:0)
所以解决方案很简单:我的用户没有权利探索(字段)列表,因为它来自(共享点)列表,因为它没有任何权利。奇怪的是,在网站上,价值是可见的,但在使用PowerShell时并非如此。