Mein Ziel ist: Holen Sie die Elemente in den Ordnern in einer SharePoint 2010-Bibliothek. Ich habe Probleme, einige Elemente aus einer SharePoint 2010-Bibliothek mithilfe von CSOM mit PowerShell zu erhalten. Ich habe drei verschiedene Methoden ausprobiert, die ich im Internet gefunden habe, aber immer noch ohne Erfolg. Auch die Microsoft-Dokumentation ist wirklich in diesem Aspekt, hoffentlich kann mir jemand helfen. So hier gehen wir:Download SharePoint 2010-Bibliothekselemente mit PowerShell V2 mit CSOM
1.VerfahrenA
[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();
Mit dem A Methode, die ich diesen Fehler:
Methodenaufruf ist fehlgeschlagen, da [System.Net.ConnectStream] enthält keine Methode mit dem Namen 'CopyTo'.
+ $ fileInfo.Stream.CopyTo < < < < ($ writeStream);
+ CategoryInfo: InvalidOperation: (CopyTo: String) [], Runtime
+ FullyQualifiedErrorId: MethodNotFound
Die [System.Net.ConnectStream] kann die Methode CopyTo nicht finden
Ich war lookign Informationen über dies, in dem System.Net-Namespace und in der "Microsoft.SharePoint.Client.FileInformation" Klasse, aber ohne Erfolg :(
2.VerfahrenB
$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()
Methode B Sie mir nicht einen Fehler geben, aber anstatt die Artikel herunterzuladen, macht es leere Dateien im Zielordner. Bei dieser Methode werden die Elemente nicht heruntergeladen, sondern nur neue Dateien erstellt.
3.VerfahrenC
$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()
Ich bin mir nicht sicher, ob Methode C zu CSOM gehört oder zum SharPoint Einbau-Server Client-Seite, wenn es so ist, lass es mich wissen . Dies ist der Fehler, den ich erhalte:
Der Aufruf der Methode ist fehlgeschlagen, weil [Microsoft.SharePoint.Client.File] keine Methode namens "OpenBinary" enthält. Bei C: \ Benutzer \ Administrator \ Desktop \ SharePointOnPremisesBackUp \ SharePointOnPremisesBackUp.ps1: 77 Zeichen: 31
+ $ binary = $ file.OpenBinary < < < <()
+ CategoryInfo: InvalidOperation: (OpenBinary: String) [ ], Runtime
+ FullyQualifiedErrorId: MethodNotFound
und hier Powershell kann nicht finden, die OpenBinary() Methode in Microsoft.SharePoint.Client.File und es gibt fast keine Informationen über diese Methode.
Dies ist die komplette Funktion Ich versuche zu verwenden:
- Sapien der Powershell Studio
- Powershell V2 mit CSOM : Ich verwende
- SharePoint 2010 OnPremises
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
}
die Werkzeuge
Bitte, wenn Sie irgendeine Lösung, Referenz, Dokumentation oder Anleitung, die nützlich sein kann, sagen Sie mir. Danke im Voraus.