使用PowerShell生成用户属性报告

在本文中,将探讨如何使用PowerShell创建自定义用户属性并生成HTML报告。这是一个在企业环境中常见的需求,管理员需要能够快速生成包含用户信息的报告。

场景描述:公司中每个用户都需要一个属性来捕获他们的Facebook URL。这个属性可以通过“个人资料”页面由相应的用户编辑。需要为所有用户生成一个HTML报告,其中包含分配的URL值。报告应该使用PowerShell生成,以便管理员可以修改它。

解决方案概述:为了给每个用户分配自定义属性,需要使用用户配置文件服务应用程序。实现步骤如下:

1. 创建用户配置文件属性

2. 更新用户Facebook URL

3. 创建PowerShell脚本

4. 生成报告

创建用户配置文件属性

首先,需要创建一个新的用户配置文件属性。SharePoint2010提供了用户配置文件属性,如:

  • 账户名
  • 电子邮件
  • 网站
  • 雇佣日期等

但这些属性可能不足以满足组织需求!可以创建自定义用户配置文件属性来解决这个问题。在本特定场景中,需要添加一个字符串类型的属性来存储Facebook URL。

注意:用户配置文件服务应用程序是负责存储用户配置文件、同步、站点配置等服务应用程序。

为了创建自定义用户配置文件属性,请打开中央管理 > 管理服务应用程序 > 用户配置文件服务应用程序 > 管理。

在出现的页面中,可以看到人员、同步、组织、站点设置组。从人员组中选择管理用户属性。

管理用户属性页面显示了现有的用户配置文件属性。可以添加/编辑/删除属性。点击顶部的新建属性链接以添加Facebook URL属性。

在出现的页面中输入详细信息:

请注意,名称代表编程目的,显示名称代表格式化显示目的。输入类型为字符串,长度为255。

期望Facebook URL属性的值如下:

  • http://www.facebook.com/UserA
  • http://www.facebook.com/UserB

设置属性值后,点击确定按钮保存更改。现在新属性应该在属性页面 > 自定义属性部分列出。

管理用户配置文件

现在需要为这个属性设置值。值可以通过以下方式设置:

  • 站点 > 每个用户的个人资料页面
  • 管理员通过中央管理

可以通过中央管理 > 管理服务应用程序 > 用户配置文件服务应用程序 > 管理快速设置配置文件属性。

在出现的页面中点击管理用户配置文件链接。将得到以下页面:

在文本框中输入用户名,然后点击查找按钮。对于检索到的结果,选择编辑个人资料上下文菜单以设置Facebook URL属性。

保存更改,然后重复几个配置文件。现在已经准备好了足够多的配置文件,分配了Facebook URL属性。

创建PowerShell脚本

可以开始创建PowerShell脚本。编写脚本时,可以使用Windows内置的编辑器。

脚本应该包含以下活动:

  • 枚举所有用户配置文件
  • 将账户名、Facebook URL写入屏幕
  • 将账户名、Facebook URL写入HTML文件

以下脚本实现了相同的功能:

C#[ void ][System.Reflection.Assembly]::LoadWithPartialName( " Microsoft.Office.Server" ) [void][System.Reflection.Assembly]::LoadWithPartialName( " Microsoft.Office.Server.UserProfiles" ) [void][System.Reflection.Assembly]::LoadWithPartialName( " Microsoft.SharePoint" ) $RootSite = " http://localhost" ; $site = new-object Microsoft.SharePoint.SPSite($RootSite); $ServiceContext = [Microsoft.SharePoint.SPServiceContext]::GetContext($site); $ProfileManager = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($ServiceContext) $AllProfiles = $ProfileManager.GetEnumerator() $array = @() write-output " Account Name, Facebook Url" foreach ($profile in $AllProfiles) { $FacebookUrl = $profile[ " FacebookUrl" ]. value $AccountName = $profile[ " AccountName" ]. value $IsEmpty = [string]::IsNullOrEmpty($FacebookUrl) if ($IsEmpty -ne " False" ) { # Create object and store in array $obj = New-Object System. Object $obj | Add-Member -type NoteProperty -name " Account Name" -value " $AccountName" $obj | Add-Member -type NoteProperty -name " Facebook Url" -value " $FacebookUrl" $array += $obj # Output to Screen write-output " $AccountName, $FacebookUrl" } } # Output to HTML, sorted $array | Select-Object | Sort-Object -Descending -Property " FacebookUrl" | ConvertTo-Html -title " Active Users" | Set-Content .\FacebookUsers.html $site.Dispose()

代码解释如下:

  • 前三行代表:添加命名空间
  • 接下来的五行代表创建SPSite、UserProfileManager实例:new-object关键字代表C#中的new运算符,$符号用于创建变量,GetEnumerator()在ProfileManager实例上调用
  • foreach循环遍历$AllProfiles变量,并且在内部:
    • 丢弃Facebook URL为空的配置文件
    • 创建具有属性Account Name、Facebook URL的新对象
    • 为新对象分配值
    • 将对象添加到数组
    • 将行写入屏幕(写入HTML遵循foreach循环)
  • 请注意,以下语句将对象添加到数组:$array += $obj
  • write-output语句:将文本写入输出屏幕(ISE编辑器)

注意:在底层,脚本被解释,.Net反射被用来调用方法和属性。例如,new-object映射到C#中的new,并调用反射的Activator.CreateInstance方法。

PowerShell中的操作符

PowerShell中可用的比较操作符如下:

操作符 描述
-eq 等于
-lt 小于
-gt 大于
-ge 大于或等于
-le 小于或等于
-ne 不等于
-like 类似(*为通配符)
-contains 包含(用于集合)

更多操作符可以在参考部分找到。

PowerShell中的注释

#用于表示单行注释。

PowerShell中的数组

使用@符号创建数组:

$arrayVariable = @()

PowerShell中的对象

创建类并分配属性:

$obj = New-Object System.Object $obj | Add-Member -type NoteProperty -name "Account Name" -value "$AccountName" $obj | Add-Member -type NoteProperty -name "Facebook Url" -value "$FacebookUrl"

–name标签指定对象的属性名称。–value标签指定对象的属性值。

PowerShell中格式化的HTML输出

创建HTML文件包括添加HTML标签,如

、、
等。PowerShellCmdlet名为ConvertTo-HTML,可以帮助完成这项工作。

执行代码

可以在ISE编辑器中执行代码,并在屏幕上查看结果。生成的HTML文件将位于上述文件夹中,并且因机器而异。在Internet Explorer中打开文件,可以查看以下结果。

本文介绍了使用PowerShell创建自定义用户属性并生成HTML报告。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485