如何生成报告来枚举出整个sharepoint环境中的每个页面所使用的所有webpart
背景
我的公司的SharePoint环境中购买了大量的第三方webpart,比如Quick Apps, Telerik RadEditor, Nintex Workflow等等。。这样做的好处就是成本相对于雇人开发自定义webpart来的性价比更高,因为找来开发团队可能价格很贵而且开发周期结束之后的长期维护可能会很麻烦。而通过购买第三方公司制作的webpart,不但实现了功能,还能得到长期的技术支持,这样在遇到灾难恢复或者SharePoint升级到新版本的时候,你的维护升级成本相对于雇人写代码来说就会显得相当的便宜。
当然买的webpart多了就会有问题,因为你不知道哪些用的多,哪些用的少,如果不能掌握他们被使用的具体数量,我们就无法决策说那些webpart在合同到期后应该要需要继续使用,而哪些则因为使用的范围太小应该被弃用。
于是我们写了一个不算很短但并不复杂的powershell脚本来找出每个页面所使用的webpart并导出结果,再将结果放到Excel中做出图表方便大家理解。
代码
我们直接看代码。
param([switch]$help) [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Publishing") function GetHelp()
{
$HelpText = "This script will list out the webparts type along with the names in publishing pages in all site ."
$HelpText
} function GetWebpartInfoInOnePage($page)
{
$manager = $web.GetLimitedWebPartManager($page, [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
$webCollection = $manager.WebParts
if ($webCollection.Count -ne 0)
{
$pageUrl=$web.Url+'/'+$page
for ($i = 0; $i -lt $webCollection.Count; $i++)
{
$webpartType = $webCollection[$i].GetType().Name
if ($webpartType -eq "ErrorWebPart")
{
$repreWebpartType=$webCollection[$i].RepresentedWebPartType.Name
$realType=$repreWebpartType.SubString($repreWebpartType.LastIndexOfAny(".") + 1)
write-host($i + 1).ToString() " " $pageUrl " " $realType " " $webCollection[$i].Title
}
else
{
write-host($i + 1).ToString() " " $pageUrl " " $webCollection[$i].GetType().Name " " $webCollection[$i].Title
}
}
}
} function RahulPublishingPageWebParts()
{
write-host "This script will enlist the webparts used in all publishing pages "
$allWebapplications = Get-SPWebApplication
foreach($webapp in $allWebapplications)
{
foreach($site in $webapp.Sites)
{
foreach($web in $site.AllWebs)
{
$pagesList=$web.Lists["Pages"]
if($pagesList -ne $null)
{
foreach($item in $pagesList.Items)
{
$page=$item.Url
GetWebpartInfoInOnePage($page)
}
}
$sitePagesList=$web.Lists["Site Pages"]
if($sitePagesList -ne $null)
{
foreach($item in $sitePagesList.Items)
{
$page=$item.Url
GetWebpartInfoInOnePage($page)
}
}
$web.Dispose()
}
$site.Dispose()
}
}
} if ($help)
{
GetHelp;
Continue
} else
{
Start-Transcript -path "result.txt" -force
RahulPublishingPageWebParts
Stop-Transcript
}
这个脚本最后会导出一个列表,将列表中的结果放入Excel在使用PowerPivot做出图表就可以了,这样比较方便省力,效果可以如下图。至于具体的制作powerpivot的方法这里就不说了。
如何生成报告来枚举出整个sharepoint环境中的每个页面所使用的所有webpart的更多相关文章
- SharePoint 网站中定义的页面背景图片不起作用
If you are working on custom SharePoint 2013 master pages, designs and/or CSS, these little CSS clas ...
- Java枚举类在生产环境中的使用方式
前言 Java枚举在项目中使用非常普遍,许多人在做项目时,一定会遇到要维护某些业务场景状态的时候,往往会定义一个常量类,然后添加业务场景相关的状态常量.但实际上,生产环境的项目中业务状态的定义大部 ...
- 在SharePoint 2010中,如何找回丢失的服务账号(Service Account)密码
背景信息: 通常在SharePoint环境中我们会使用很多的服务账号来运行各种不同的服务,尤其在企业环境中,由于权限管理条例严格,这些服务账号更是只能多不能少.面对如此多的服务账号,各个企业都会有自己 ...
- 在SharePoint解决方案中使用JavaScript (1) – 引用.js文件
本文是系列文章的第一篇. 在SharePoint解决方案中使用JavaScript (0) 作为在SharePoint应用程序中使用JavaScript的第一步,就是要知道如何将一个写好的.js文件, ...
- C# 处理Word自动生成报告 四、程序处理
C# 处理Word自动生成报告 一.概述 C# 处理Word自动生成报告 二.数据源例子 C# 处理Word自动生成报告 三.设计模板 C# 处理Word自动生成报告 四.程序处理 现在说一下程序处理 ...
- LoadRunner结果分析与生成报告
启动Analysis会话 1.打开HP LoadRunner2.打开LoadRunner Analysis在LoadRunner Analysis选项卡中单击分析负载测试3.打开Analysis会话文 ...
- 安全基线自动化扫描、生成报告、加固的实现(以Tomcat为例)
一.背景说明 当前在服务上线前,安全部门都会对服务基线配置进行把关,整个流程可以分为扫描.生成报告.修复三步. 在执行这一流程时当前普遍的做法是半自动化的,扫描和生成报告是自动化的,执行扫描.执行生成 ...
- Monkey 生成报告方法
Monkey 命令简介 Monkey 是 SDK 中附带的一个小工具,用来进行压力测试.进行压力测试之前,首先要进行安装 SDK ,并配置环境变量: 1.安装 Java JDK 并配置环境变量(计算机 ...
- unittest自动化测试举例:自动读取ymal用例&调用接口并生成报告
用unittest框架写的接口自动化实现过程: 1.编写ymal格式用例: 2.导入ddt模块,该模块的主要功能是帮你读取ymal用例文件,自动获取内容并循环调用函数,具体见代码. 3.导入Beaut ...
随机推荐
- 只有IE64位能上网。
- LeetCode 206 Reverse a singly linked list.
Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. ...
- shell循环语句
所有的笔记只记录一些例子,根据例子解释一些出现的语法,不介绍具体的语法 2015-07-01 21:58:33 星期三 for循环 用例一用for循环在家目录下创建aaa1-aaa10,然后在aaa1 ...
- 模板类 error LNK2019: 无法解析的外部符号
如果将类模板的声明和实现写在两个独立的文件中,在构建时会出现"error LNK2019: 无法解析的外部符号 "的错误. 解决方法有: 第一种方法,就是把类模板中成员函数的声明和 ...
- Python-模块的使用
基础概念 - 模块是Python组织代码的基本方式 - 一个Python脚本可以单独运行,也可以导入到另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module) - 所有的.py文件都可以 ...
- MIT 6.828 JOS学习笔记12 Exercise 1.9
Lab 1中Exercise 9的解答报告 Exercise 1.9: 判断一下操作系统内核是从哪条指令开始初始化它的堆栈空间的,以及这个堆栈坐落在内存的哪个地方?内核是如何给它的堆栈保留一块内存空间 ...
- MySLQ 为数据库远程授权的方法与问题的解决解决方法
Mysql通过远程的连接工具连接,提示Can't connect to MySQL server (10060). 这个时候我们需要分析,看哪里设置不当而导致的该问题. 工具/原料 mysql数 ...
- CSS中使用text-transform实现首字母大写
CSS中首字母大写怎么实现?日常生活中需求方对英文的要求比较多,有的时候需要让英文单词或拼音首个字母大写;有的时候需要让全文中英文单词全大写或小写.这时候我们就需要text-transform属性了. ...
- python 爬虫(五)
下载媒体文件 I 使用urllib.request.urlretrieve方法可以下载文件存为指定文件 from urllib.request import urlretrieve from urll ...
- 恶心的content
getBaseContent getApplicationContent ...