SharePoint Online итерация через библиотеки документов CSOM

Я пытаюсь выполнить итерацию через библиотеку документов и установить каждый документ / элементы, чтобы наследовать разрешения (на данный момент каждый документ / элемент использует уникальные разрешения).

Я могу получить конкретную библиотеку документов, однако я не могу выполнить итерацию по каждому из элементов / документов в ней. Вот что у меня есть на данный момент:

Add-Type -Path "Libraries\Microsoft.SharePoint.Client.dll" 
Add-Type -Path "Libraries\Microsoft.SharePoint.Client.Runtime.dll" 
Add-Type -Path "Libraries\Microsoft.SharePoint.Linq.dll"
Add-Type -Path "Libraries\Microsoft.SharePoint.dll"

$webUrl = "https://test.sharepoint.com/sites/testsite" 
$username = "####"
$password = "####"
$securePass = ConvertTo-SecureString $password -AsPlainText -Force
$listname = "TestDoc";

$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($webUrl)
$ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePass)

#variables
$web = $ctx.Web
$lists = $web.Lists
$ctx.Load($lists)
$ctx.Load($web)
$ctx.ExecuteQuery()

#print web URL
write-host `n "Web Url:" `n $web.Url

foreach ($list in $lists)
{

    if ($list.Title -eq "TestDoc")
    {
        #print list name if found
        write-host `n "Found the list:" `n $list.Title `n


            #attempting to iterate through items in the document library 
            foreach ($item2 in $list.Items)
            {
                #list the items/documents  in the document library
                write-host $item2.Title 
            }


    }
}

Это цикл foreach. У меня сейчас проблемы, так как я не уверен, как выполнить цикл по каждому из элементов / документов в библиотеке документов.

Будем очень признательны за любые предложения по подходу, который я должен принять.


person Dev P    schedule 29.01.2015    source источник


Ответы (1)


Я получал ошибку:

Не удалось найти перегрузку для «Load» и счетчика аргументов: «1». В C: \ Users \ setup \ Desktop \ Test-BreakInheritence-Script-SPOnline \ Permissions-Inh eritence.ps1: 38 символов: 3 + $ ctx.Load ($ items) + ~~~~~~~~~~~ ~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodException + FullyQualifiedErrorId:

Связано с методом Load (), требующим передачи в него дополнительных параметров. Я думаю, это требуется только при работе со списками / listItems. Я не тратил много времени на выяснение точной первопричины, но я переработал свое решение и упростил его:

Add-Type -Path "Libraries\Microsoft.SharePoint.Client.dll" 
Add-Type -Path "Libraries\Microsoft.SharePoint.Client.Runtime.dll" 
Add-Type -Path "Libraries\Microsoft.SharePoint.Linq.dll"
Add-Type -Path "Libraries\Microsoft.SharePoint.dll"

    $webUrl = "https://test.sharepoint.com/sites/testsite" 
    $username = "####"
    $password = "####"
    $securePass = ConvertTo-SecureString $password -AsPlainText -Force
    $listname = "TestDoc"

    $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($webUrl)
    $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePass)


    #get the List/DocLib and load it for use
    $listUpdate = $ctx.Web.Lists.GetByTitle($listname)
    $ctx.Load($listUpdate)
    $ctx.ExecuteQuery()

    #CAML Query to get all items inclusing sub-folders
    $spQuery = New-Object Microsoft.SharePoint.Client.CamlQuery
    $spQuery.ViewXml = "<View Scope='RecursiveAll' />";
    $itemki = $listUpdate.GetItems($spQuery)
    $ctx.Load($itemki)
    $ctx.ExecuteQuery()

    #iterating through the items and reseting permission inheritence
    for($j=0; $j -lt $itemki.Count; $j++)
    {
        $itemki[$j].ResetRoleInheritance()
        $ctx.ExecuteQuery()
    }

Теперь это работает как шарм.

person Dev P    schedule 02.02.2015
comment
Спасибо. Это помогло мне создать сценарий, который изменяет заголовки документов в библиотеке документов SPO. - person John Donnelly; 21.12.2015