适用于 SharePoint 的最有用的 PowerShell 命令
SharePoint Server 是一个基于 Web 的协作平台,与 Microsoft Office 集成。为了配置 SharePoint 网站设置,系统管理员通常使用随 SharePoint 产品安装的 SharePoint Management Shell。运行 SharePoint Management Shell 会调用 Windows PowerShell 运行时环境并执行名为 sharepoint.ps1 的脚本文件,该文件会加载适用于 SharePoint 的 Windows PowerShell 管理单元并运行一些命令。这些命令并不是很重要;其中包括选择 C:UsersUsername 作为命令执行的主位置并运行最新版本的 PowerShell 控制台。
更好的选择是使用 PowerShell ISE。它不仅包含许多专为管理 SharePoint 创建的 cmdlet,还提供颜色突出显示的代码、调试引擎和 cmdlet 搜索引擎。
要加载 SharePoint 管理单元,我们需要运行以下命令:
Add-PSSnapin Microsoft.SharePoint.PowerShell之后,请谨慎更新 PowerShell 帮助,以便获取有关 Microsoft SharePoint PowerShell cmdlet 的最新信息:
Update-Help那么,SharePoint 管理单元中提供了哪些 cmdlet?以下命令将为您列出所有这些内容:
Get-Command -Module "Microsoft.SharePoint.PowerShell"
现在让我们仔细看看最有用的 SharePoint cmdlet。
获取 SharePoint 站点信息
Get-SPSite cmdlet 是用于获取有关 SharePoint 网站集信息的主要 cmdlet。它列出了 SharePoint 网站的 URL 及其兼容性级别(SharePoint 版本)。
在此 cmdlet 中使用 Select-Object 参数,我们可以获得有关站点的特定属性,例如站点所有者、存储使用情况、最大配额级别和上次内容修改日期:
Get-SPSite "http://sharepoint/sites/ent" | Select-Object url, owner, @{Expression={$_.Usage.Storage}}, @{Expression={$_.Audit.AuditFlags}}, readonly, LastContentModifiedDate, @{Express={$_.QuotaStorageMaximumLevel}}此外,我们可以将 SharePoint 场中所有网站的信息导出到 csv 文件:
Get-SPWebApplication http://sharepoint/ | Get-SPSite -Limit All | Get-SPWeb -Limit All | Select Title, URL, ID, ParentWebID | Export-CSV C:rootsharepointinventory.csv -NoTypeInformation我们还可以使用 Get-SPSite cmdlet 创建一个 SharePoint PowerShell 脚本,列出特定 SharePoint 网站的所有组及其成员:
$site = Get-SPSite http://sharepoint/sites/ent/
$groups = $site.RootWeb.sitegroups
foreach ($grp in $groups) {"Group: " + $grp.name; foreach ($user in $grp.users) {" User: " + $user.name} }
$site.Dispose()如果您需要 SharePoint 网站的完整权限报告,请运行以下代码,并指定 SharePoint 网站 URL ($SPSiteURL) 以及将数据导出到 csv 文件的路径 ($ExportFile):
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$SPSiteUrl = "http://sharepoint/sites/ent"
$SPSite = New-Object Microsoft.SharePoint.SPSite($SPSiteUrl);
$ExportFile = "C:rootPermissions.csv"
"Web Title,Web URL,List Title,User or Group,Role,Inherited" | out-file $ExportFile
foreach ($WebPath in $SPSite.AllWebs)
{
if ($WebPath.HasUniqueRoleAssignments)
{
$SPRoles = $WebPath.RoleAssignments;
foreach ($SPRole in $SPRoles)
{
foreach ($SPRoleDefinition in $SPRole.RoleDefinitionBindings)
{
$WebPath.Title + "," + $WebPath.Url + "," + "N/A" + "," + $SPRole.Member.Name + "," + $SPRoleDefinition.Name + "," + $WebPath.HasUniqueRoleAssignments | out-file $ExportFile -append
}
}
}
foreach ($List in $WebPath.Lists)
{
if ($List.HasUniqueRoleAssignments)
{
$SPRoles = $List.RoleAssignments;
foreach ($SPRole in $SPRoles)
{
foreach ($SPRoleDefinition in $SPRole.RoleDefinitionBindings)
{
$WebPath.Title + "," + $WebPath.Url + "," + $List.Title + "," + $SPRole.Member.Name + "," + $SPRoleDefinition.Name | out-file $ExportFile -append
}
}
}
}
}
$SPSite.Dispose();要在 SharePoint 网站上查找特定文件,我们需要使用 Get-SPWeb cmdlet。下面是一个脚本,用于在“http://sharepoint/sites/ent”站点中搜索名称包含单词“readme”的文件:
Get-SPWeb http://sharepoint/sites/ent |
Select -ExpandProperty Lists |
Where { $_.GetType().Name -eq "SPDocumentLibrary" -and
-not $_.Hidden } |
Select -ExpandProperty Items |
Where { $_.Name -like "*readme*" } |
Select Name, {$_.File.Length}, url
现在让我们制作一个报告,该报告将输出特定用户创建的所有文件。例如,当员工离开公司并且您需要将其数据传输给其他人时,此脚本可能会很有帮助。
Get-SPWeb http://sharepoint/sites/ent |
Select -ExpandProperty Lists |
Where { $_.GetType().Name -eq "SPDocumentLibrary" -and
-not $_.Hidden } |
Select -ExpandProperty Items |
Where { $_["Created By"] -like "*system*" } |
Select Name, url, {$_["Created By"]}我们的最后一个脚本使用 Get-SPWebcmdlet 报告具有指定扩展名的所有文件:
Get-SPWeb http://sharepoint/sites/ent |
Select -ExpandProperty Lists |
Where { $_.GetType().Name -eq "SPDocumentLibrary" -and
-not $_.Hidden } |
Select -ExpandProperty Items |
Where { $_.Name -Like "*.rtf" } |
Select Name,
@{Name="URL";
Expression={$_.ParentList.ParentWeb.Url + "/" + $_.Url}}使用 PowerShell 管理 SharePoint 网站和对象
新的 SharePoint 网站通常使用模板创建。要获取所有网站模板的列表,请运行不带参数的 Get-SPWebTemplate cmdlet。
我们使用 Get-SPWebTemplate cmdlet 和 New-SPSite cmdlet 基于模板创建新的 SharePoint 网站。以下是使用“团队站点”模板 (STS#0) 创建站点的脚本示例:
$template = Get-SPWebTemplate "STS#0"
New-SPSite -Url "http://sharepoint/sites/Netwrixteamsite" -OwnerAlias "enterpriset.simpson" -Template $template要删除站点,我们使用 Remove-SPSite cmdlet:
Remove-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -GradualDelete有时,您可能需要更改网站集管理员。执行以下脚本为指定用户添加管理员权限:
Set-SPSite -Identity "http://sharepoint/sites/Netwrixteamsite" -SecondaryOwnerAlias " i:0#.w|enterprisei.scur"现在,让我们看看如何管理网站集的权限。首先,让我们为特定的 Active Directory 用户帐户添加某些访问权限。在这种情况下,用户“enterpriset.simpson”将被授予网站“http://sharepoint/sites/ent”的“贡献者”权限。请注意,在常规用户帐户名称(例如“enterpriset.simpson”)之前,您需要使用前缀“i:0#.w|”。否则,执行将失败并且脚本将生成错误。
Set-SPUser -Identity "i:0#.w|enterpriset.simpson" -Web http://sharepoint/sites/ent -AddPermissionLevel "Contributor"要向某个 AD 安全组添加权限,请使用相同的脚本,但键入组的名称而不是用户帐户的名称。
要将用户添加到组,请使用以下命令:
Set-SPUser -Identity "i:0#.w|enterprisej.carter" -Web http://sharepoint/sites/ent -Group "Enterprise Owners"结论
正如您所看到的,使用 SharePoint PowerShell 脚本管理和报告 SharePoint 网站并不像乍看起来那么困难。事实上,在某些情况下,运行脚本比从管理审核日志生成报告要快得多。
为了保持 Microsoft SharePoint 环境的安全和高可用性,您还需要仔细跟踪其中的更改。 Netwrix Auditor for SharePoint 可以轻松生成有关 SharePoint 更改的报告,使您可以全面了解谁更改了哪些内容、何时以及在哪个 SharePoint 场上进行了更改。您还可以自动接收有关重要更改的通知。此外,Netwrix Auditor for SharePoint 将为您提供有关当前权限及其授予方式的完整信息,并显示 SharePoint 环境中任何损坏的继承。


