Почему коллекция инициализируется для одного сайта, а не для другого с правильными разрешениями? - PullRequest
0 голосов
/ 05 октября 2019

Я просто пытаюсь подключиться к другому сайту SharePoint. Этот код прекрасно работает с определенным сайтом, но при использовании другого сайта с правильными разрешениями для сайта и списка сайтов я получаю следующую ошибку:

format-default: коллекция не была инициализирована. Он не был запрошен или запрос не был выполнен. Может потребоваться явный запрос.

Если пользователь имеет полный контроль над списком SharePoint и сайтом SharePoint, почему не инициализируется соединение?

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

$ sharepointlistitems = Get-ListItems -Context $ Context -ListTitle $ ListName

Вот код от начала до конца для доступа к сайту. Закомментированный сайт отлично работает с кодом как:

[Reflection.Assembly]::LoadFile(([System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client").location))
[Reflection.Assembly]::LoadFile(([System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.runtime").location))


$admincreds = Get-Credential



$SPCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($admincreds.UserName, $admincreds.Password)




######### Create Sharepoint List Functions ######################################################################

#Function to get items that are not processed
Function Get-ListItems([Microsoft.SharePoint.Client.ClientContext]$Context, [String]$ListTitle) {
    $list = $Context.Web.Lists.GetByTitle($ListTitle)
    $qry = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery()
    #In future query by status to avoid slowing down of program
    $items = $list.GetItems($qry)
    $Context.Load($items)
    $Context.ExecuteQuery() 
    return $items 
}

#Function to update item status
Function Set-ListItemByID([Microsoft.SharePoint.Client.ClientContext]$Context, [String]$ListTitle, [int]$ItemId, [string]$Status) {
    $list = $Context.Web.Lists.GetByTitle($ListTitle)
    $listitem = $list.GetItemById($ItemId)
    $listitem["AutoAccountCreationStatus"] = $Status
    $listitem.Update();
    $Context.ExecuteQuery()

}


##########################   Step 1: Read from SharePoint List and add to an array  ###########################################


#Sets Site, sets list of interest, creates array
#"https://<sitename>.sharepoint.com/sites/Home/TeamSite"
$SiteUrl = "https://<sitename>.sharepoint.com/sites/InfTech"
$ListName = "New Users"

#Setup the context
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
$Context.Credentials = $SPCredentials

#Getting items from list
$sharepointlistitems = Get-ListItems -Context $Context -ListTitle $ListName 
$sharepointlistitems = $sharepointlistitems | where {$_['AutoAccountCreationStatus'] -eq 'Received'}```

1 Ответ

0 голосов
/ 07 октября 2019

Я обычно использую редактор сценариев Power GUI для отладки сценария PowerShell, мы можем отслеживать переменные, это полезно для устранения неполадок.

enter image description here

Или вывместо этого можно использовать PnP PowerShell , демо

...