使用PowerShell中的CSOM管理Office 365 SharePoint Online

在管理Office 365的SharePoint Online时,可能会遇到一些任务,比如管理租户、用户和站点集合。截至本文撰写时,SharePoint Online只有33个命令。例如,它没有激活特性或管理服务应用程序的命令。本文将介绍如何在PowerShell中使用CSOM(客户端对象模型)来访问Office 365,这样就可以管理各个站点、列表、特性、服务应用程序等。

首先,需要在本地机器上安装SharePoint客户端DLL,以便运行这些PowerShell命令。可以下载并安装SharePoint 2013的客户端SDK。这个SDK可以单独下载安装,也是Visual Studio Professional版的一部分。

首先,需要将客户端程序集加载到会话中:

PowerShell Add-Type –Path " C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ 15\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type –Path " C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ 15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

接下来,初始化所需的变量:

PowerShell $userName = " " ; $site = " " ; $pwd = Read-Host -Prompt " Please enter your password" -AsSecureString ;

获取上下文是主要部分。注意正在使用New-Object命令。这是一个创建新对象的命令。将使用这个命令从CSOM创建新对象。这相当于C#中的new操作符。

PowerShell $context = New-Object Microsoft.SharePoint.Client.ClientContext( $site ); $cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials( $userName , $pwd ); $context .Credentials = $cred ;

现在,可以开始使用CSOM了。例如,访问列表:

PowerShell $lists = $context .Web.Lists; $context .Load( $lists ); $context .ExecuteQuery(); foreach ( $list in $lists ) { Write-Host $list .Title; }

或者,如果想列出特定列表的项目,可以这样做:

PowerShell $contactsList = $lists .GetByTitle( " MyContacts" ); $query = [ Microsoft .SharePoint.Client.CamlQuery]::CreateAllItemsQuery( 100 ); $items = $contactsList .GetItems( $query ); $context .Load( $contactsList ); $context .Load( $items ); $context .ExecuteQuery(); foreach ( $item in $items ) { Write-Host $item [ " FirstName" ] }

与托管代码中使用的CSOM有一些细微的差别。例如,不能使用lambda表达式来限制检索的字段或指定Include,如下所示:

PowerShell # this will throw an error! $context .Load( $lists , " Include(Title)" );

可以创建一个列表:

PowerShell $lci = New-Object Microsoft.SharePoint.Client.ListCreationInformation; $lci .Title = " Custom List" ; $lci .TemplateType = ' 100' ; $customList = $lists .Add( $lci ); $customList .Update(); $context .ExecuteQuery();

可以向列表添加现有的站点列:

PowerShell $availableFields = $web .AvailableFields; $context .Load( $availableFields ); $context .ExecuteQuery(); $companyField = $availableFields | Where { $_ .Title -eq " Company" } $context .Load( $companyField ); $context .ExecuteQuery(); $customList = $lists .GetByTitle( " Custom List" ); $context .Load( $customList ); $context .ExecuteQuery(); $customList .Fields.Add( $companyField ); $customList .Update(); $context .ExecuteQuery();

并将该列添加到默认视图:

PowerShell $defaultView = $customList .DefaultView; $defaultView .ViewFields.Add( " Company" ); $defaultView .Update(); $customList .Update(); $context .ExecuteQuery();

处理特性

假设想要激活‘Search Server Web Parts and Templates’特性。可以这样做:

PowerShell $featureGuid = New-Object System.Guid " {9c0834e1-ba47-4d49-812b-7d4fb6fea211}" $context .Site.Features.Add( $featureGuid , $true, [ Microsoft .SharePoint.Client.FeatureDefinitionScope]::None); $context .ExecuteQuery();

要找到特性的ID,可以去特性列表页面。在开发者工具中,选择激活按钮。div元素的ID就是特性GUID!

处理托管元数据

使用上下文获取托管元数据服务:

PowerShell $mms = [ Microsoft .SharePoint.Client.Taxonomy.TaxonomySession]::GetTaxonomySession( $context ); $context .Load( $mms ); $context .ExecuteQuery();

检索现有的术语存储:

PowerShell $termStores = $mms .TermStores; $context .Load( $termStores ); $context .ExecuteQuery(); $termStore = $termStores [ 0 ]; $context .Load( $termStore ); $context .ExecuteQuery();

在术语存储中创建一个组。发现这很有帮助,因为找不到从Office 365的UI创建它的方法。

PowerShell $group = $termStore .CreateGroup( " PowerShell" , " {C93600E9-49D0-4079-8DBE-8282A8CE4119}" ); $context .Load( $group ); $context .ExecuteQuery();

现在,可以在这个组中创建一个术语集:

PowerShell $termSet = $group .CreateTermSet( " SharePoint" , " {6768B471-7EA3-4981-81A4-EA4902543365}" , 1033 ); $context .Load( $termSet ); $context .ExecuteQuery();

然后在组中创建术语:

PowerShell $term = $termSet .CreateTerm( " CSOM" , 1033, " {E16CD934-74DB-4D2A-AB39-D24422DBC1B1}" ); $context .Load( $term ); $context .ExecuteQuery();
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485