SharePoint Online CSOM / PowerShell权限

时间:2017-02-21 16:54:13

标签: powershell sharepoint permissions csom

使用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

给我回复错误

  

该集合尚未初始化。它没有被要求或   请求尚未执行。它可能需要明确   请求..

1 个答案:

答案 0 :(得分:0)

例外

  

该集合尚未初始化。它没有被要求或   请求尚未执行。它可能需要明确   请求。

通常意味着您尚未从服务器检索您尝试使用的属性(例如HasUniqueRoleAssignments)。

您可能需要额外的ExecuteQuery来加载每个应用

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

您最终会注意到,使用常规csom api(例如HasUniqueRoleAssignments)无法检索某些属性,对于那些可以使用Gary的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