在管理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();