Моя цель: Получить элементы в папках в библиотеке SharePoint 2010. Я пытаюсь получить некоторые элементы из библиотеки SharePoint 2010 с помощью CSOM с PowerShell. Я пробовал три разных метода, которые я нашел в Интернете, но все же безуспешно. Кроме того, документация Microsoft в этом аспекте, в первую очередь, такова, надеюсь, что кто-то может мне помочь. Так вот мы идем:Загрузите элементы библиотеки SharePoint 2010 с помощью PowerShell V2 с CSOM
1.Method
[Microsoft.SharePoint.Client.FileInformation]$fileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($ctx, $file.ServerRelativeUrl);
[System.IO.FileStream]$writeStream = [System.IO.File]::Open("$($libraryTargetPath)\$($file.Name)", [System.IO.FileMode]::Create);
$fileInfo.Stream.CopyTo($writeStream);
$writeStream.Close();
С помощью метода Я получаю эту ошибку:
Метод вызова не удалось, потому что [System.Net.ConnectStream] не содержит метода с именем «CopyTo».
+ $ fileInfo.Stream.CopyTo < < < < ($ writeStream);
+ CategoryInfo: InvalidOperation: (CopyTo: String) [], RuntimeException
+ FullyQualifiedErrorId: MethodNotFound
код [System.Net.ConnectStream] не может найти метод CopyTo
Я был lookign информация о это, в пространстве имен System.Net и в классе "Microsoft.SharePoint.Client.FileInformation", но без успеха :(
2.MethodB
$binary = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($ctx, $file.ServerRelativeUrl)
$Action = [System.IO.FileMode]::Create
$new = "$($libraryTargetPath)\$($file.Name)"
$stream = New-Object System.IO.FileStream $new, $Action
$writer = New-Object System.IO.BinaryWriter($stream)
$writer.write($binary)
$writer.Close()
Метод B не дает мне ошибку, но вместо загрузки деталей, это делает пустые файлы в папке назначения. Таким образом, этот метод не загружает элементы, просто создавая новые файлы.
3.MethodC
$binary = $file.OpenBinary()
$stream = New-Object System.IO.FileStream("$($libraryTargetPath)\$($file.Name)"), Create
$writer = New-Object System.IO.BinaryWriter($stream)
$writer.write($binary)
$writer.Close()
Я не уверен, если метод C принадлежит CSOM или к SharPoint встроенной стороне сервера клиента, если это так, пожалуйста, дайте мне знать, , Это ошибка, которую я получаю:
Ошибка вызова метода, поскольку [Microsoft.SharePoint.Client.File] не содержит метода с именем «OpenBinary». В C: \ Users \ Administrator \ Desktop \ SharePointOnPremisesBackUp \ SharePointOnPremisesBackUp.ps1: 77 символ: 31
+ $ двоичным = $ file.OpenBinary < < < <()
+ CategoryInfo: InvalidOperation: (OpenBinary: String) [ ], RuntimeException
+ FullyQualifiedErrorId: MethodNotFound
и здесь PowerShell не может найти OpenBinary() метод в Microsoft.SharePoint.Client.File и там почти нет информации об этом методе.
Здесь полная функция, которую я пытаюсь использовать:
function GetDocumentLibs ($ctx, $web)
{
Function IterateFoldersRecursively([Microsoft.SharePoint.Client.Folder]$folder, [Microsoft.SharePoint.Client.ClientContext]$ctx)
{
# make sure that the "Web.Context.Url" is the current web url
if ($web.Context.Url.StartsWith($SiteCollectionUrl) -eq $true)
{
$files = $folder.Files
$ctx.Load($folder.Files)
$ctx.Load($folder.Folders)
$ctx.ExecuteQuery()
foreach ($subFolder in $folder.Folders)
{
IterateFoldersRecursively $subFolder $ctx
}
# Check if folder Exist and Skip
$libraryTargetPath = "$($TargetPath)\$($folder.ServerRelativeUrl.Replace('/', '\'))"
New-Item -Path $libraryTargetPath -ItemType Directory -Force
foreach ($file in $files)
{
# Method 1
[Microsoft.SharePoint.Client.FileInformation]$fileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($ctx, $file.ServerRelativeUrl);
[System.IO.FileStream]$writeStream = [System.IO.File]::Open("$($libraryTargetPath)\$($file.Name)", [System.IO.FileMode]::Create);
$fileInfo.Stream.CopyTo($writeStream)
$writeStream.Close()
# Method 2
$binary = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($ctx, $file.ServerRelativeUrl)
$Action = [System.IO.FileMode]::Create
$new = "$($libraryTargetPath)\$($file.Name)"
$stream = New-Object System.IO.FileStream $new, $Action
$writer = New-Object System.IO.BinaryWriter($stream)
$writer.write($binary)
$writer.Close()
# Method 3
$binary = $file.OpenBinary()
$stream = New-Object System.IO.FileStream("$($libraryTargetPath)\$($file.Name)"), Create
$writer = New-Object System.IO.BinaryWriter($stream)
$writer.write($binary)
$writer.Close()
# delete folder
}
}
}
$folder = $web.GetFolderByServerRelativeUrl($web.ServerRelativeUrl)
$ctx.Load($folder)
$ctx.ExecuteQuery()
IterateFoldersRecursively $folder $ctx
}
инструменты я использую:
- Sapien в PowerShell Студия
- PowerShell V2 с CSOM
- SharePoint 2010 OnPremises
Пожалуйста, если у вас есть какое-либо решение, ссылка, документация или учебник, которые могут быть полезны, скажите мне. Заранее спасибо.