背景

我的公司的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的更多相关文章

  1. SharePoint 网站中定义的页面背景图片不起作用

    If you are working on custom SharePoint 2013 master pages, designs and/or CSS, these little CSS clas ...

  2. Java枚举类在生产环境中的使用方式

    前言   Java枚举在项目中使用非常普遍,许多人在做项目时,一定会遇到要维护某些业务场景状态的时候,往往会定义一个常量类,然后添加业务场景相关的状态常量.但实际上,生产环境的项目中业务状态的定义大部 ...

  3. 在SharePoint 2010中,如何找回丢失的服务账号(Service Account)密码

    背景信息: 通常在SharePoint环境中我们会使用很多的服务账号来运行各种不同的服务,尤其在企业环境中,由于权限管理条例严格,这些服务账号更是只能多不能少.面对如此多的服务账号,各个企业都会有自己 ...

  4. 在SharePoint解决方案中使用JavaScript (1) – 引用.js文件

    本文是系列文章的第一篇. 在SharePoint解决方案中使用JavaScript (0) 作为在SharePoint应用程序中使用JavaScript的第一步,就是要知道如何将一个写好的.js文件, ...

  5. C# 处理Word自动生成报告 四、程序处理

    C# 处理Word自动生成报告 一.概述 C# 处理Word自动生成报告 二.数据源例子 C# 处理Word自动生成报告 三.设计模板 C# 处理Word自动生成报告 四.程序处理 现在说一下程序处理 ...

  6. LoadRunner结果分析与生成报告

    启动Analysis会话 1.打开HP LoadRunner2.打开LoadRunner Analysis在LoadRunner Analysis选项卡中单击分析负载测试3.打开Analysis会话文 ...

  7. 安全基线自动化扫描、生成报告、加固的实现(以Tomcat为例)

    一.背景说明 当前在服务上线前,安全部门都会对服务基线配置进行把关,整个流程可以分为扫描.生成报告.修复三步. 在执行这一流程时当前普遍的做法是半自动化的,扫描和生成报告是自动化的,执行扫描.执行生成 ...

  8. Monkey 生成报告方法

    Monkey 命令简介 Monkey 是 SDK 中附带的一个小工具,用来进行压力测试.进行压力测试之前,首先要进行安装 SDK ,并配置环境变量: 1.安装 Java JDK 并配置环境变量(计算机 ...

  9. unittest自动化测试举例:自动读取ymal用例&调用接口并生成报告

    用unittest框架写的接口自动化实现过程: 1.编写ymal格式用例: 2.导入ddt模块,该模块的主要功能是帮你读取ymal用例文件,自动获取内容并循环调用函数,具体见代码. 3.导入Beaut ...

随机推荐

  1. hbase 简单操作

    创建一个表 hbase(main):001:0> create 'student', 'name' 0 row(s) in 14.0260 seconds => Hbase::Table ...

  2. PHP中计算时间段

    在php中 strtotime() 函数将任何英文文本的日期时间描述解析为 Unix 时间戳. 语法strtotime(time,now)  time函数为需要转化为时间戳的时间点  now为返回值的 ...

  3. 关于QImage提取单色通道方法(vector)

    转载请标明处: 作者:微微苏荷 本文地址:关于QImage提取单色通道方法(vector) 近日,用QT和mxnet结合做一个图像识别的demo.遇到需要把图片从QImage转为vector单色分离的 ...

  4. C 标准库系列之ctype.h

    ctype.h 主要提供了一些函数用以测试字符或字符处理的功能函数:包括字符判断检测.字符转换: 目前ASCII字符可分为以下一些类型,如:大写.小写.字母.数字.十六进制.空白字符.可打印字符.控制 ...

  5. resin实现热部署配置

    修改resin.xml文件 <host id="test.com" root-directory="."> <host-alias>te ...

  6. SQL Server 2012 新特性

    --Concat示例 ,null,'RTM') --Format实例 DECLARE @d DATETIME = GETDATE(); SELECT FORMAT( @d, 'd', 'en-US' ...

  7. java.lang.NoSuchMethodException: org.apache.ibatis.executor.statement.StatementHandler.prepare(java.sql.Connection)

    此错误是由于版本造成的,如果使用mybatis3.4版本以上,配置拦截器规则应增加Intger @Intercepts({ @Signature( type= StatementHandler.cla ...

  8. Java基础加强之集合篇(模块记忆、精要分析)

    千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...

  9. iOS 面试题搜集

    1.#import和#include的区别,@class代表什么? 2.浅拷贝和深拷贝区别是什么? 3.Objective-C中类别和类扩展的区别? 4.Objective-C堆和栈的区别? 5.内存 ...

  10. C#开发笔记

    Dictionary 检查后获取值:Dictionary.TryGetValue() KeyValuePair<T, K> 的非泛型形式:DictionaryEntry List 由ILi ...