0

Powershell を使用して、Sharepoint Online で作成されたチームサイトのドキュメント ライブラリにサンプル フォルダーを作成したいのですが、エラーが発生しています。

チームサイトを作成したら、次のスクリプトを使用します。

#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();

これはどのように解決できますか?

4

1 に答える 1

1

タイプが Office 365 と互換性のないSharePoint Server Side API にMicrosoft.SharePoint.SPFileSystemObjectType属しているため、このエラーが発生しています。

以下は、PowerShell (SharePoint CSOM API を使用) を使用して SharePoint Online サイトにフォルダーを作成する方法を示しています。

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 = "jdoe@contoso.onmicrosoft.com"
$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 
}

フォルダー構造を維持しながらファイルをアップロードするシナリオに興味がある場合は、「方法: PowerShell 経由で Office 365 にファイルをアップロードする」の投稿を参照してください。この目的のために既製のスクリプトが含まれています。

于 2016-06-30T10:54:21.257 に答える