最有用的 SharePoint PowerShell 命令
Aug 26, 2025
最有用的 SharePoint PowerShell 命令可让管理员比使用原生工具更高效地管理站点、对象和权限。诸如 Get-SPSite 和 Get-SPWeb 之类的 cmdlet 可提供详细的站点和文件信息,而 New-SPSite、 Remove-SPSite 和 Set-SPUser 则可简化站点创建、删除和访问控制。通过自动化报表、权限管理和审计,SharePoint PowerShell 脚本能够提升工作效率、减少错误,并在各类环境中增强安全性。
SharePoint Server 是一个与 Microsoft Office 集成的基于 Web 的协作平台。为了配置 SharePoint 站点设置,系统管理员通常会使用随 SharePoint 产品一起安装的 SharePoint Management Shell。运行 SharePoint Management Shell 会调用 Windows PowerShell 运行时环境,并执行名为 sharepoint.ps1 的脚本文件。该脚本会加载用于 SharePoint 的 Windows PowerShell 插件(snap-in),然后运行一些命令。这些命令并不算很重要;例如,它们包括选择 C:UsersUsername 作为命令执行的主目录(home location),以及运行 PowerShell 控制台的最新版本。
更好的选择是使用 PowerShell ISE。它不仅包含了许多专门用于管理 SharePoint 的 cmdlet,还提供了带有颜色高亮的代码、调试引擎以及 cmdlet 搜索引擎。
要加载 SharePoint snap-in,我们需要运行以下命令:
Add-PSSnapin Microsoft.SharePoint.PowerShell
之后,建议更新 PowerShell 帮助信息,以获取有关 Microsoft SharePoint PowerShell cmdlet 的最新资料:
Update-Help
那么,SharePoint snap-in 中有哪些 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-SPWeb cmdlet,报告所有具有指定扩展名的文件:
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 站点。下面是使用“Team Site”模板(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"
现在,让我们看看如何管理我们站点集合(site collections)的权限。首先,让我们为特定 Active Directory 用户账户添加某些访问权限。在这种情况下,用户“enterpriset.simpson”将获得对站点“http://sharepoint/sites/ent”的“Contributor”(贡献者)权限。请注意,在使用像“enterpriset.simpson”这样的常规用户账户名之前,需要先使用前缀“i:0#.w|”。否则,执行将失败,并且脚本会生成错误。
Set-SPUser -Identity "i:0#.w|enterpriset.simpson" -Web http://sharepoint/sites/ent -AddPermissionLevel "Contributor"
要为某个 AD security 组添加权限,请使用相同的脚本,但把组名输入进去,而不是输入用户账户名。
要将用户添加到组,请使用以下命令:
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 farm 进行了哪些更改。您还可以自动接收有关关键变更的通知。此外, Netwrix Auditor for SharePoint 将为您提供当前权限及其授予方式的完整信息,并显示您 SharePoint 环境中的任何中断继承情况。
分享到
了解更多
关于作者
Jeff Melnick
系统工程总监
Jeff 是 Netwrix 的前 Global Solutions Engineering 总监。他是一位长期的 Netwrix 博主、演讲者和讲解员。在 Netwrix 博客中,Jeff 分享各种生活技巧,以及可以显著提升您系统管理体验的提示与技巧。