我一直在使用PowerShell通过使用Invoke-WebRequest
从SharePoint列表中获取一些网站和管理员详细信息。列表中有3个人或组列,其中两个是主要和次要管理员,最后一个是网站管理员组并列出其成员。
我遇到的问题是,我可以扩展主管理员字段和辅助管理员字段以获取名称/电子邮件地址等。如果我对管理员组使用完全相同的内容,则会返回400错误。我怀疑这是由于“管理”列中的“允许多项选择”已打勾,所以我没有正确扩展它。
这是适用于2个管理列的Uri:
站点url等./_api/web/列表(guid''siteGUID'')/项目? / LastName&$ expand = Primary_x0020_Contact,Secondary_x0020_Contact
当我添加要扩展的第三人称列时,此错误返回错误:
站点url等./_api/web/列表(guid''siteGUID'')/项目? / LastName,Admin_x0020_Group / EMail,Admin_x0020_Group / FirstName,Admin_x0020_Group / LastName&$ expand = Primary_x0020_Contact,Secondary_x0020_Contact,Admin_x0020_Group
我也尝试过将这个uri扩展为管理员组,而没有其他人,但是它也给出了相同的错误:
站点url等./_api/web/列表(guid''siteGUID'')/项目?$ select = Admin_x0020_Group / EMail,Admin_x0020_Group / FirstName,Admin_x0020_Group / LastName&$ expand = Admin_x0020_Group'
关于标题等。我正在使用以下内容:
$headers = @{accept = "application/json;odata=verbose"}
$response = Invoke-WebRequest -Uri $uri -Headers $headers -UseDefaultCredentials
任何有关如何使此工作正常运行的建议将不胜感激。
答案 0 :(得分:0)
您还可以尝试以下操作。由于有多种使用SharePoint Online的方法。我最喜欢的方法之一是安装SharePoint Online SDK。这带有dll文件,您可以将其添加到脚本中。参见下面的示例脚本,该脚本在某个子网站上创建查询,然后循环浏览所有结果并写出“雇员”标签。
Add-Type –Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type –Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.UserProfiles.dll"
$UserName = "admin@yoursite.onmicrosoft.com"
$Password = "yourpassword"
$Url = "https://yoursite.sharepoint.com/subSite"
$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
$context = New-Object Microsoft.SharePoint.Client.ClientContext($Url)
$context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword)
$listTitle = "Title of the list containing the items you want to query"
$list = $Context.Web.Lists.GetByTitle($listTitle)
$fields = $list.Fields
$qry = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery(10000,'ID','Created','Modified','Title','Employees')
$items = $list.GetItems($qry)
$Context.Load($fields)
$Context.Load($items)
$Context.ExecuteQuery()
foreach($item in $items){
$item.FieldValues['Employees']
}
上面看到的是一个示例脚本,该脚本能够从列表中查询项目。在foreach循环中,我循环浏览“列表”中找到的所有项目,并写出“雇员”选项卡。在我的CreateAllItemsQuery中,我给出了获取“ ID”,“ Title”等的命令。在此之后,我可以解决所有这些值。
查询SharePoint Online环境的另一种方法是使用webrequest:
查询特定列表上特定文件夹的权限信息的示例,该列表是在打开文件夹共享权限时通过重新创建此确切的url生成的:
$baseUri = "https://yoursite.sharepoint.com"
$clientId = 'YourClientId'
$clientSecret = 'YourclientSecret'
$resource = '00000002-0000-0fe2-ce00-000000000000/yoursite.sharepoint.com@7b60bad-9ab2-45d0-a2ac-c2c4ght4f7e'
$body = @{
grant_type = 'client_credentials'
client_id = $ClientId
client_secret = $ClientSecret
resource = $Resource
}
$result = Invoke-WebRequest -Method Post -Uri 'https://accounts.accesscontrol.windows.net/7b40dcad-9fe2-44d0-a0cc-c2d32f008f7e/tokens/OAuth/2' -ContentType 'application/x-www-form-urlencoded' -Body $body
$accessToken = ($result.content | ConvertFrom-Json).access_token
$headers = @{
accept = 'application/json;odata=verbose'
authorization = "Bearer $accessToken"
}
$listId = "2BD249F3-1847-4972-835S-99266DC415"
$itemId = "2"
$uri = $baseUri + "/Lists(@a1)/GetItemById(@a2)/GetSharingInformation?@a1='{$listId}'" + "&@a2='$itemId'" + '&$Expand=permissionsInformation,pickerSettings'
$result = Invoke-WebRequest -Method Post -Uri $uri -Headers $headers
($result.content | ConvertFrom-Json).d.permissionsInformation.links.results.linkDetails.Invitations.results
如您所见,可以通过多种方式与SharePoint Online进行交互。基本上,最后一个选择主要是在开发人员工具(F12)中查找请求,并找到SharePoint本身进行的确切查询并复制该URL。第一个是借助于dll文件的帮助,该文件需要额外的安装。
您可以看到有很多选项。如果您找不到正确的网址来执行Web请求,则第一个选项可能很有趣。这需要大量的反复试验,但是希望对您有所帮助。