Проблемы с получением нескольких сведений о пользователе из столбца пользователя или группы в списке SharePoint с помощью Powershell Invoke-WebRequest - PullRequest
0 голосов
/ 14 февраля 2019

Я использовал PowerShell для получения некоторых сведений о сайте и администраторе из списка SharePoint с помощью Invoke-WebRequest.В списке есть 3 столбца или столбца группы, два из которых предназначены для основного и дополнительного администраторов, где последний относится к группе администраторов сайтов и содержит список ее членов.

Проблема, с которой я сталкиваюсь, заключается в том, что я могу расширитьполя основного и дополнительного администратора, чтобы получить имена / адреса электронной почты и т. д. Если я использую ту же самую вещь для группы администраторов, она возвращает ошибку 400.Я подозреваю, что это связано с тем, что в столбце admin установлен флажок «Разрешить множественный выбор», и поэтому я не расширяю его правильно.

Это Uri, который работает для 2 столбцов администратора:

URL-адрес сайта и т. Д.LastName & $ expand = Primary_x0020_Contact, Secondary_x0020_Contact

Эта ошибка возвращает ошибку, когда я добавляю раскрываемый столбец от третьего лица:

URL сайта и т. Д ./_api/web/списки (guid''siteGUID '') / пункты? $ выберите = *, Secondary_x0020_Contact / EMAIL, Secondary_x0020_Contact / ПгвЬЫат, Secondary_x0020_Contact / LastName, Primary_x0020_Contact / EMAIL, Primary_x0020_Contact / ПгвЬЫат, Primary_x0020_Contact / LastName, Admin_x0020_Group / EMAIL, Admin_x0020_Group / ПгвЬЫат, Admin_x0020_Group/ LastName & $ = расширение Primary_x0020_Contact, Secondary_x0020_Contact, Admin_x0020_Group

Я также пытался просто расширить группу администраторов без других с помощью этого URI, но он также выдал ту же ошибку:

URL сайта и т. Д./ _api / web / lists (guid''siteGUID ') / items? $ 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

Любой совет о том, как получить эту работу, будет принята с благодарностью.

1 Ответ

0 голосов
/ 14 февраля 2019

Также вы можете попробовать следующее.Так как есть несколько способов использования 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», «Заголовок» и т. Д. Все эти значения я могу адресовать после этого.

Другой способ запроса вашей среды SharePoint Online - использование веб-запроса:

Пример запроса информации о разрешениях для определенной папки в определенном списке, который я сгенерировал, воссоздав этот точный 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.И в основном последний вариант - это, в основном, просмотр запросов в Developer Tools (F12), поиск точного запроса, который SharePoint выполняет сам, и репликация этого URL.Первый - с помощью DLL-файлов, которые требуют дополнительной установки.

Как вы можете видеть, есть множество вариантов.Если вы не можете найти правильный URL для выполнения веб-запроса, первый вариант может быть интересным.Требуется много проб и ошибок, но я надеюсь, что это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...