2017-02-21 43 views
0

У меня проблемы с списком разрешений списков с использованием CSOM/PowerShell.SharePoint Online CSOM/Разрешения PowerShell

Переменные/фильтры

$spSiteUrl = "https://mytenant.sharepoint.com" 

Попадая учетные данные

if($cred -eq $null) 
{ 
    $cred = Get-Credential 
} 

Загрузка Сборки

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null 

Подключение в SharePoint и показывая название сайта

Write-Host "Connecting to SharePoint" 
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($spSiteUrl) 
$ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($cred.UserName, $cred.Password) 

$web = $ctx.Web 
$ctx.Load($web) 
$ctx.ExecuteQuery() 
Write-host "Site Name : $($web.Title)" 

Функция списка "полезные" приложения

function getApps($web) 
{ 
    $appsArray = @() 

    $apps = $web.Lists 
    $ctx.Load($apps) 

    $ctx.ExecuteQuery() 

    Write-Host "List of aplications : " 
    foreach($app in $apps){ 
     if($app.Hidden -eq $false) 
     { 
      $item = New-Object PSObject 
      $item | Add-Member -MemberType NoteProperty -Name 'Col1' -Value $($app.Title) 
      $item | Add-Member -MemberType NoteProperty -Name 'Col2' -Value $($app.HasUniqueRoleAssignments) 
      $item | Add-Member -MemberType NoteProperty -Name 'Col3' -Value $($app.RoleAssignments) 
      $item | Add-Member -MemberType NoteProperty -Name 'Col4' -Value $($app.BrowserFileHandling) 
      $item | Add-Member -MemberType NoteProperty -Name 'Col5' -Value $($app.EffectiveBasePermissions) 
      $item | Add-Member -MemberType NoteProperty -Name 'Col6' -Value $($app.Fields) 
      $item | Add-Member -MemberType NoteProperty -Name 'Col7' -Value $($app.WorkflowAssociations) 
      $appsArray += $item 
     } 
    } 
    $appsArray | Format-Table 
} 

Вызов функции

getApps($web) 

Моя проблема заключается в том, что:

  • app.HasUniqueRoleAssignments $
  • $ app.RoleAssignments
  • $ app.BrowserFileHandling
  • $ app.EffectiveBasePermissions
  • $ app.Fields
  • $ app.WorkflowAssociations

Возвращение мне ошибки

коллекция не была инициализирована. Он не был запрошен или запрос не был выполнен. Это, возможно, потребуется явно просьба ..

ответ

0

Исключением

коллекция не была инициализирована. Он не был запрошен или запрос не был выполнен. Возможно, это должно быть явно запрошено .

Как правило, свойство, с которым вы пытаетесь работать (например, HasUniqueRoleAssignments), еще не было получено с сервера.

Вы, вероятно, потребуется дополнительное ExecuteQuery для загрузки каждого приложения

foreach($app in $apps){ 
if($app.Hidden -eq $false) 
{ 
$ctx.Load($app) 
$ctx.ExecuteQuery() 

Вы в конце концов заметил, что некоторые свойства не может быть получены с помощью регулярного csom API (например, как HasUniqueRoleAssignments) и для тех, кого вы можете использовать PowerShell Гари , что дает вам возможность делать то, что вы в противном случае было бы использовать Linq

foreach($app in $apps){ 
if($app.Hidden -eq $false) 
{ 
$ctx.Load($app) 
Load-CSOMProperties -object $app -propertyNames @("HasUniqueRoleAssignments") 
$ctx.ExecuteQuery() 

https://gist.github.com/glapointe/cc75574a1d4a225f401b#file-load-csomproperties-ps1

https://sharepoint.stackexchange.com/questions/126221/spo-retrieve-hasuniqueroleassignements-property-using-powershell