繁体   English   中英

SharePoint CSOM PowerShell不返回Web.Folders属性

[英]SharePoint CSOM PowerShell Does Not Return Web.Folders property

此处的目标是从此PowerShell代码开始访问Web.Folders属性。

Connect-SPOnline –Url https://mysite.sharepoint.com;
$web = Get-SPOWeb;
$web | Get-Member | sort name

从该列表成员中,我可以看到具有以下内容的“文件夹”属性

Definition:
----------                                                                                                                                                  
Microsoft.SharePoint.Client.FolderCollection, 
Microsoft.SharePoint.Client, 
Version=16.1.0.0, 
Culture=neutral, 
PublicKeyToken=71e9bce111e9429c Folders {get;}

因此,我不应该能够使用以下代码片段检索“文件夹属性”吗?

$ctx = Get-SPOContext;
$folders = $web.Folders;
$ctx.Load($folders);
$ctx.ExecuteQuery();
$folders;

$folders仅返回以下未初始化的消息。

format-default : The collection has not been initialized. It has not been requested or the request has not been
executed. It may need to be explicitly requested.
    + CategoryInfo          : NotSpecified: (:) [format-default], CollectionNotInitializedException
    + FullyQualifiedErrorId : Microsoft.SharePoint.Client.CollectionNotInitializedException,Microsoft.PowerShell.Comma
   nds.FormatDefaultCommand

不要让此错误消息使您感到困惑。 即使未从服务器请求客户端对象(文件夹集合)时,通常会发生此错误,但在以下特定情况下,由于以下原因会发生此错误:

$folders

因此,使用指定的片段文件夹集合可以从服务器正确检索:

$web = $ctx.Web
$folders = $web.Folders
$ctx.Load($folders)
$ctx.ExecuteQuery()

为了确定是否已从服务器请求客户端对象,请使用ClientObject.IsObjectPropertyInstantiated method ,例如:

if ($web.IsObjectPropertyInstantiated('Folders') -eq $true)
{
   Write-Host "Folder collection has been loaded"
   #... 

}

下面的示例演示如何访问collection中的文件夹及其属性。

示例1.如何迭代文件夹集合并打印其名称:

$folders.GetEnumerator() | % { 
    Write-Host "Folder name: $($_.Name)" 
}

示例2.如何通过索引访问文件夹并打印其名称:

if($folders.Count -gt 0){
    $folder = $folders[0] #get first item
    Write-Host "Folder name: $($folder.Name)" 
} 

第一个答案就可以了。 这是为什么的更多说明。

您已经正确访问了web.Folder属性。 但是,正如前面的答案指出的那样,该行:

$文件夹

是问题。 这是因为,当您将命令作为项目输入时,Powershell会通过打印出该项目的“每个单一”属性来工作。 (Powershell会使用反射来遍历对象的每个单一属性,或类似的东西)。

对于$ folders,某些属性-如format-default(如错误消息所示)未初始化。 因此,当Powershell尝试打印出每个单个属性时,它将失败。

因此,一旦初始化$ folders集合,下一步就是读取特定项目并初始化该项目的属性。

了解Powershell在做什么是关键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM