0

В SharePoint 2013 я пытаюсь получить элементы списка с помощью SharePoint PowerShell на стороне клиента. Даже для идентификатора поля или заголовка я сталкиваюсь с этой ошибкой: коллекция не была инициализирована. Я не знаю, как включить поля. Я нахожу много примеров на C# или JavaScript, но ни один из них не работает на стороне клиента.Клиентский SharePoint PowerShell - Получить элементы списка - коллекция не была инициализирована

Вот мой код (он возвращает правильно количество элементов):

Function New-Context([String]$WebUrl) { 
    $context = New-Object Microsoft.SharePoint.Client.ClientContext($WebUrl) 
    $context.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials 
    $context 
} 

Function Get-List([Microsoft.SharePoint.Client.ClientContext]$Context, [String]$ListTitle) { 
    $list = $context.Web.Lists.GetByTitle($ListTitle) 
    $context.Load($list) 
    $context.ExecuteQuery() 
    $list 
} 

$context = New-Context -WebUrl "http://mysharepoint.com/sites/qp" 
$list = Get-List -Context $context -ListTitle "QP-Configuration" 

$query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery() 
$items = $list.GetItems($query) 
$context.Load($items) 
$context.ExecuteQuery() 

$items.Count 
$items[0] 

foreach($item in $items) 
{ 
    $item.Id 
} 

$context.Dispose() 
+2

Пожалуйста выкладываю полную ошибку, включая номер строки и т.д. –

+0

Полная ошибка либо вы попробуйте получить доступ к элементу (либо $ items [0], либо в foreach) 'format-default: коллекция не была инициализирована. Он не был запрошен или запрос не был выполнен. Возможно, потребуется явно запросить его. + CategoryInfo: NotSpecified: (:) [формат по умолчанию], CollectionNotInitializedException + FullyQualifiedErrorId: Microsoft.SharePoint.Client.CollectionNotInitializedException, Microsoft.PowerShell.Commands.FormatDefaultCommand' – Cyril

ответ

-1

ошибка была попытаться получить полный пункт вроде этого: $items[0] или значение столбца с использованием $item.Title вместо $item["Title"]

правильный код:

#Import the required DLL 
Add-Type -Path 'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll' 

Function New-Context([String]$WebUrl) { 
    $context = New-Object Microsoft.SharePoint.Client.ClientContext($WebUrl) 
    $context.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials 
    $context 
} 

Function Get-List([Microsoft.SharePoint.Client.ClientContext]$Context, [String]$ListTitle) { 
    $list = $context.Web.Lists.GetByTitle($ListTitle) 
    $context.Load($list) 
    $context.ExecuteQuery() 
    $list 
} 

$context = New-Context -WebUrl "http://mysharepointsite.com/sites/qp" 
$list = Get-List -Context $context -ListTitle "QP-Configuration" 

$query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery() 
$items = $list.GetItems($query) 
$context.Load($items) 
$context.ExecuteQuery() 

$items.Count 

foreach($item in $items) 
{ 
    $item["Title"] 
} 

$context.Dispose() 
+0

это ложное утверждение: _it вызвано как определен переменная внутри функции_, и ей нечего делать, если вы используете функцию или нет. Как было упомянуто в ответе, который я представил, он связан с тем, как доступ к объектам осуществляется в PowerShell. –

+0

Если это не имеет никакого отношения к функции, почему она работает без функции? Проблематичной функцией был Get-List – Cyril

+0

Нет, это не о функции, попробуйте вернуть выражение '$ items [0]' и произойдет такая же ошибка. –

0

при получении определенного элемента списка по индексу в строке:

$items[0]

или переборе коллекции Microsoft.SharePoint.Client.ListItemCollection:

foreach($item in $items) 
{ 
    #... 
} 

каждое свойство объекта предполагается инициализируется в PowerShell, но это не тот случай с Microsoft.SharePoint.Client.ListItem, так как только определенное подмножество свойств может быть и эта причина возникает.

Чтобы получить список вещей значений я хотел бы предложить, чтобы получить доступ к ним через ListItem.FieldValues собственности:

#get list items values 
$dataValues = @() 
$items.GetEnumerator() | % { 
    $dataValues += $_.FieldValues 
} 

Пример

$query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery() 
$items = $list.GetItems($query) 
$context.Load($items) 
$context.ExecuteQuery() 

$dataValues = @() 
$items.GetEnumerator() | % { 
    $dataValues += $_.FieldValues 
} 

$dataValues.Count #determine the amount of items 
$dataValues[0] #access item by index 

#iterate through list items and print a specific field value, for example FileRef 
foreach($item in $dataValues) 
{ 
    $item.FileRef 
} 
+0

Это также работает. – Cyril

 Смежные вопросы

  • Нет связанных вопросов^_^