我开发了一个脚本来检索SharePoint Online服务器上的列表项,该服务器在我的Windows 10笔记本上运行得非常好,但在默认的Windows Server 2012 R2实例上却没有。以下是相关代码:
$context = New-Object Microsoft.SharePoint.Client.ClientContext($Url)
$context.RequestTimeout = 360000
$context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword)
$list = $Context.Web.Lists.GetByTitle($ListTitle)
$qry = new-object Microsoft.SharePoint.Client.CamlQuery
$camlString = "somequery"
$qry.ViewXml = $camlString
$items = $list.GetItems($qry)
$Context.Load($items)
$Context.ExecuteQuery()
不幸的是,$list
变量在2k12 R2服务器上没有从SharePoint返回任何列表,因此我最终得到以下错误。
Exception calling "ExecuteQuery" with "0" argument(s): "Value cannot be null.
Parameter name: key"
At E:\temp\MDS_SharepointTracker_v2.ps1:131 char:5
+ $Context.ExecuteQuery()
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentNullException
我很确定它与身份验证有关,但我无法弄清楚是什么。
用于登录的凭据在两个系统上都是相同的,两个系统都安装了SharePoint Online Management Shell,Powershell版本相同且加载了DLL(见下文)。两个系统上的代理设置相同。通过浏览器,我可以在服务器上访问SharePoint Online。
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
唯一的区别是我使用笔记本上的域用户登录(尽管不是与用于SP凭据的用户在同一个域中),而在服务器上,我使用的是本地用户。
任何想法或暗示?
答案 0 :(得分:1)
经过一番调查后,我终于找到了问题。
我测试脚本的服务器没有加入域。因此,服务器和SP之间没有信任,导致身份验证失败的原因 - 尽管没有任何指示。
检查$error[0]|format-list -force
是驱使我测试身份验证问题的原因。
在不同的其他客户端和已加入域的服务器上尝试该脚本已成功。
虽然不再需要,但我找不到能够在工作组服务器上运行脚本的方法,SharePointOnlineCredentials
似乎无法在没有联合的情况下处理登录...如果我错了,请纠正我