2016-04-12 6 views
1

ここでの目標は、このPowerShellコードで始まるWeb.Foldersプロパティにアクセスすることです。SharePoint CSOM 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;} 

を持っている「フォルダ」のプロパティを見ることができるメンバーは、私は次のコードを使用して、フォルダProperyを盗んすることができshould'nt?

$ctx = Get-SPOContext; 
$folders = $web.Folders; 
$ctx.Load($folders); 
$ctx.ExecuteQuery(); 
$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 

答えて

2

このエラーメッセージは混乱を招くことはありません。指定されたスニペットフォルダのコレクションを使用して、だから、

$folders 

なっている:クライアントオブジェクト(フォルダコレクション)は、この特定のケースでは、サーバーから要求されていない場合に、このエラーは通常発生するにもかかわらず、それが原因のラインに発生しますクライアントオブジェクトは、例えば、ClientObject.IsObjectPropertyInstantiated methodを利用サーバから要求されたか否かを決定するために

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

:サーバから適切に取得

次の例は、コレクション内のフォルダとそのプロパティにアクセスする方法を示しています。

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

最初の答えは、それを取得します。インデックスでフォルダにアクセスし、その名前を印刷する方法

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

例2:フォルダのコレクションを反復処理し、その名前を印刷する方法

例1 。なぜそれがあるのか​​についてもっと詳しく説明します。

web.Folderプロパティに正しくアクセスしました。前の回答が指摘するようにしかし、ライン:

$フォルダ

が問題です。これはPowershellがコマンドとしてその項目を入力すると、項目のEVERY SINGLEプロパティを出力することによって機能します。 (Powershellは、オブジェクトの1つのプロパティ、またはそれに類するものすべてを通過するためにリフレクションを使用します)。

$フォルダの場合、format-default(エラーメッセージで示される)などの一部のプロパティは初期化されません。したがって、Powershellがすべてのプロパティを出力しようとすると失敗します。

したがって、$ foldersコレクションを初期化したら、次に特定のアイテムを読み取り、そのアイテムのプロパティを初期化します。

Powershellが何をしているのかを理解することが重要です。

関連する問題