2016-06-30 3 views
0

Я хочу создать примерную папку в библиотеке документов созданного Teamsite в Sharepoint Online, используя Powershell, но нахожусь в ошибке.Создать папку в DocLib Teamsite - Office 365 - Sharepoint Online

После того как я создал TeamSite я использую следующий сценарий:

#Retrieve list 
$DocLibName = "Dokumente" 
$FolderTitle = "Beispiel" 
$List = $ctx.Web.Lists.GetByTitle($DocLibName) 
$folder = $list.AddItem("", [Microsoft.SharePoint.SPFileSystemObjectType]::Folder) 
$folder["Title"] = $FolderTitle 
$folder.Update(); 

$ctx.Load($List) 
$ctx.ExecuteQuery() 

Сообщение об ошибке

типа [Microsoft.SharePoint.SPFileSystemObjectType] не был найден: Убедитесь, что сборка, которая содержит этот тип, загружается.

Line:79 Char:1 
+ $ Folder = $ List.addItem ("" [Microsoft.SharePoint.SPFileSystemObjectType ] :: Folde ... 

It is not possible to use an index to a null array. 
Line:80 Char:1 
+ $ Folder ["Title"] = $FolderTitle 

It is not possible to call a method for an expression of the NULL . 
Line:81 Char:1 
+ $Folder.Update(); 

Как это можно решить?

ответ

1

Вы получаете эту ошибку, так как Microsoft.SharePoint.SPFileSystemObjectType тип относится к SharePoint стороне сервера API, который не совместим с Office 365.

Ниже показано, как создать папку в SharePoint Online сайта с помощью PowerShell (утилизирует CSOM API SharePoint)

Function Create-Folder() 
{ 
Param(
    [Parameter(Mandatory=$True)] 
    [Microsoft.SharePoint.Client.Folder]$ParentFolder, 

    [Parameter(Mandatory=$True)] 
    [String]$FolderName 
) 

    $folder = $ParentFolder.Folders.Add($folderName) 
    $ParentFolder.Context.Load($folder) 
    $ParentFolder.Context.ExecuteQuery() 
    return $folder 
} 

Function Get-Context($Url,$Username,$Password){ 
    $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force 
    $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword) 
    $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($url) 
    $ctx.Credentials = $credentials 
    return $ctx 
} 

Использование

$Url = "https://contoso.sharepoint.com/" 
$UserName = "[email protected]" 
$Password = "" 
$TargetFolderName = "Archive2016" 


$ctx = Get-Context -Url $Url -Username $Username -Password $Password 
$parentFolder = $ctx.Web.Lists.GetByTitle("Documents").RootFolder 
$folder = Create-Folder -ParentFolder $parentFolder -FolderName $TargetFolderName 
Write-Host "Folder [$TargetFolderName] has been created succesfully. Url: $($folder.ServerRelativeUrl)" 

Для создания иерархии папки может быть использован следующий сценарий:

Function Create-FolderHierarchy() 
{ 
Param(
    [Parameter(Mandatory=$True)] 
    [Microsoft.SharePoint.Client.Folder]$ParentFolder, 

    [Parameter(Mandatory=$True)] 
    [String]$FolderUrl 
) 

    $folderNames = $FolderUrl.Trim().Split("/",[System.StringSplitOptions]::RemoveEmptyEntries) 
    $folderName = $folderNames[0] 
    $curFolder = $ParentFolder.Folders.Add($folderName) 
    $ParentFolder.Context.Load($curFolder) 
    $ParentFolder.Context.ExecuteQuery() 
    if ($folderNames.Length -gt 1) 
    { 
     $curFolderUrl = [System.String]::Join("/", $folderNames, 1, $folderNames.Length - 1) 
     return Create-FolderHierarchy -ParentFolder $curFolder -FolderUrl $curFolderUrl 
    } 
    return $curFolder 
} 

Если вы заинтересованы в сценарии для загрузки файлов, сохраняя структуру папок, взглянуть на How to: Upload files into Office 365 via PowerShell посте, он содержит готовый для этой цели.

Смежные вопросы