在本文中,将探讨如何使用PowerShell创建自定义用户属性并生成HTML报告。这是一个在企业环境中常见的需求,管理员需要能够快速生成包含用户信息的报告。
场景描述:公司中每个用户都需要一个属性来捕获他们的Facebook URL。这个属性可以通过“个人资料”页面由相应的用户编辑。需要为所有用户生成一个HTML报告,其中包含分配的URL值。报告应该使用PowerShell生成,以便管理员可以修改它。
解决方案概述:为了给每个用户分配自定义属性,需要使用用户配置文件服务应用程序。实现步骤如下:
1. 创建用户配置文件属性
2. 更新用户Facebook URL
3. 创建PowerShell脚本
4. 生成报告
首先,需要创建一个新的用户配置文件属性。SharePoint2010提供了用户配置文件属性,如:
但这些属性可能不足以满足组织需求!可以创建自定义用户配置文件属性来解决这个问题。在本特定场景中,需要添加一个字符串类型的属性来存储Facebook URL。
注意:用户配置文件服务应用程序是负责存储用户配置文件、同步、站点配置等服务应用程序。
为了创建自定义用户配置文件属性,请打开中央管理 > 管理服务应用程序 > 用户配置文件服务应用程序 > 管理。
在出现的页面中,可以看到人员、同步、组织、站点设置组。从人员组中选择管理用户属性。
管理用户属性页面显示了现有的用户配置文件属性。可以添加/编辑/删除属性。点击顶部的新建属性链接以添加Facebook URL属性。
在出现的页面中输入详细信息:
请注意,名称代表编程目的,显示名称代表格式化显示目的。输入类型为字符串,长度为255。
期望Facebook URL属性的值如下:
设置属性值后,点击确定按钮保存更改。现在新属性应该在属性页面 > 自定义属性部分列出。
现在需要为这个属性设置值。值可以通过以下方式设置:
可以通过中央管理 > 管理服务应用程序 > 用户配置文件服务应用程序 > 管理快速设置配置文件属性。
在出现的页面中点击管理用户配置文件链接。将得到以下页面:
在文本框中输入用户名,然后点击查找按钮。对于检索到的结果,选择编辑个人资料上下文菜单以设置Facebook URL属性。
保存更改,然后重复几个配置文件。现在已经准备好了足够多的配置文件,分配了Facebook URL属性。
可以开始创建PowerShell脚本。编写脚本时,可以使用Windows内置的编辑器。
脚本应该包含以下活动:
以下脚本实现了相同的功能:
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()
代码解释如下:
注意:在底层,脚本被解释,.Net反射被用来调用方法和属性。例如,new-object映射到C#中的new,并调用反射的Activator.CreateInstance方法。
PowerShell中可用的比较操作符如下:
操作符 | 描述 |
---|---|
-eq | 等于 |
-lt | 小于 |
-gt | 大于 |
-ge | 大于或等于 |
-le | 小于或等于 |
-ne | 不等于 |
-like | 类似(*为通配符) |
-contains | 包含(用于集合) |
更多操作符可以在参考部分找到。
#用于表示单行注释。
使用@符号创建数组:
$arrayVariable = @()
创建类并分配属性:
$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标签指定对象的属性值。
创建HTML文件包括添加HTML标签,如
等。PowerShellCmdlet名为ConvertTo-HTML,可以帮助完成这项工作。 |
可以在ISE编辑器中执行代码,并在屏幕上查看结果。生成的HTML文件将位于上述文件夹中,并且因机器而异。在Internet Explorer中打开文件,可以查看以下结果。
本文介绍了使用PowerShell创建自定义用户属性并生成HTML报告。