Как написать ctx.Load в сценарии powershell? - PullRequest
0 голосов
/ 03 февраля 2020

Blow - это пример C#, чтобы получить страницы сайта в SharePoint:

var listTitle = "Site Pages";
var list = ctx.Web.Lists.GetByTitle(listTitle);
var items = list.GetItems(CamlQuery.CreateAllItemsQuery());
ctx.Load(items, **icol => icol.Include( i => i["WikiField"], i => i["CanvasContent1"], i => i["FileRef"], i => i.ContentType**));
ctx.ExecuteQuery();
foreach (var item in items)
{
     Console.WriteLine(">>> {0}", item["FileRef"]);
     switch (item.ContentType.Name)
     {
        case "Site Page":
          Console.WriteLine(item["CanvasContent1"]);
          break;
        case "Wiki Page":
          Console.WriteLine(item["WikiField"]);
          break;

     }    
 }

Мой вопрос: в методе ctx.Load () как написать часть lik "i =>" в скрипт powershell?

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Я преобразую код C# в приведенный ниже скрипт PowerShell для справки.

##Variables for Processing
$SiteUrl = "https://tenant.sharepoint.com/sites/team"
$UserName="admin@tenant.onmicrosoft.com"
$Password ="xxxx"
$ListName="Site Pages"

Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" 
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

#Setup Credentials to connect
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,(ConvertTo-SecureString $Password -AsPlainText -Force))

$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl) 
$ctx.Credentials = $credentials

$List = $ctx.Web.Lists.GetByTitle($ListName)
$ListItems = $List.GetItems([Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery())
$ctx.Load($List.ContentTypes)
$ctx.Load($ListItems)
$ctx.ExecuteQuery()

foreach($item in $ListItems){
    $ContentType = $List.ContentTypes| Where {$_.Id.ToString() -eq $item["ContentTypeId"].ToString()}
    Write-host $item["FileRef"]
    if($ContentType.Name -eq "Site Page"){  
        Write-host $item["CanvasContent1"]
    }
    if($ContentType.Name -eq "Wiki Page"){  
        Write-host Write-host $item["WikiField"]
    }   
}
0 голосов
/ 03 февраля 2020

Поскольку я не знаю, какие типы ctx.Load требуются, я опубликую пример на основе LINQ, показывающий, как определять делегатов.

Вы можете определить делегата следующим образом:

[Func[int,bool]] $delegate = { param($n) ; $n % 2 -eq 0 }

В приведенном ниже примере для вывода четных чисел используется LINQ:


[int[]]$numbers = 1 .. 100
[Func[int,bool]] $delegate = { param($n) ; $n % 2 -eq 0 }
[Linq.Enumerable]::Where($numbers, $delegate)

Вот ссылка TIO на онлайн-пример.

Если вы хотите использовать лямбда-стиль, вы можете напишите:

[int[]]$numbers = 1 .. 100
[Linq.Enumerable]::Where($numbers, [Func[int,bool]] { param($n) ; $n % 2 -eq 0 })

Надеюсь, это поможет.

...