Как использовать объектную модель клиента SharePoint и PowerShell для загрузки документов в библиотеки?

Я пытался преобразовать эти фрагменты кода в PowerShell:

ClientContext context = new ClientContext("http://spdevinwin");
   2:  
   3: Web web = context.Web;
   4:  
   5: FileCreationInformation newFile = new FileCreationInformation();
   6: newFile.Content = System.IO.File.ReadAllBytes(@"C:\Work\Files\17580_FAST2010_S05_Administration.pptx");
   7: newFile.Url = "17580_FAST2010_S05_Administration 4MB file uploaded via client OM.pptx";
   8:  
   9: List docs = web.Lists.GetByTitle("Documents");
  10: Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(newFile);
  11: context.Load(uploadFile);
  12: context.ExecuteQuery();
  13: Console.WriteLine("done");

а также:

// FileInfo in System.IO namespace
var fileCreationInformation = new FileCreationInformation();

byte[] bytefile = System.IO.File.ReadAllBytes(“c:\\test\Test2.txt”);
fileCreationInformation.Content = bytefile;
fileCreationInformation.Overwrite = true;
fileCreationInformation.Url = “http://astro/MyLibrary/MyFolder/Test2.txt”;

// CurrentList is a client OM List object
CurrentList.RootFolder.Files.Add(fileCreationInformation);
Context.ExecuteQuery();

Но я получаю ошибки в методах Update() и Add($file)

2 ответа

Вы сможете использовать командлеты SharePoint PowerShell только в том случае, если вы работаете на сервере. Они не работают удаленно, особенно для SharePoint Online.

Вы не включили весь свой код PowerShell, но я предполагаю, что вы не вызывали ClientContext.Load и ClientContext.ExecuteQuery после каждого шага получения списка и загрузки файла на сервер.

Справочник по использованию многих сценариев PowerShell CSOM

Вместо использования клиентской объектной модели принятым способом загрузки файлов в SharePoint с помощью PowerShell является использование команд SharePoint PowerShell. Вы можете использовать что-то похожее на следующий код:

Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue

$Library = "My Library"
$siteurl = "http://MyWebApp/sites/SiteName"
$FilePath = "C:\Test\test2.txt"

# Get Web site
$Web = Get-SPWeb $SiteUrl

# Get Library
$docLibrary = $web.Lists[$Library]
$folder = $docLibrary.RootFolder

# Get the file
$File = Get-ChildItem $FilePath

# Build the destination SharePoint path
$SPFilePath = ($folder.URL + "/" + $File.Name)

$spFile = $folder.Files.Add($SPFilePath, $File.OpenRead(), $true)  #Upload with overwrite = $true (SP file path, File stream, Overwrite?)

Для функции многократного использования, которую вы можете использовать для загрузки файлов, перезаписи, утверждения и регистрации, используйте командлет, который я создал здесь: http://pastebin.com/Tvb4LfZV

Другие вопросы по тегам