65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 PowerShell 创建 Facebook URL 的 HTML 报告

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2012年10月18日

CPOL

5分钟阅读

viewsIcon

18955

downloadIcon

112

在本文中,我们将探讨添加自定义用户配置文件属性并基于该属性生成报告的场景。

引言

在本文中,我们将探讨添加自定义用户配置文件属性并基于该属性生成报告的场景。这里的**挑战**在于,报告的生成应使用 PowerShell 进行,因为它更容易由管理员创建、执行和管理。

场景

公司里的每位用户都需要一个属性来存储他们的 Facebook URL。这个属性可以由相应的用户通过**我的个人资料**页面进行编辑。

需要为所有已分配 URL 值的用户生成一份 HTML 报告。该报告应以 PowerShell 的形式呈现,以便管理员可以进行修改。报告应如下所示:

解决方案

由于需要为每位用户分配一个自定义属性,因此我们必须使用用户配置文件服务应用程序。

实现步骤如下:

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

  2. 更新用户及其 Facebook URL

  3. 创建 PowerShell 脚本

  4. 生成报告

用户配置文件属性

作为第一步,我们需要创建一个新的用户配置文件属性。SharePoint 2010 提供了用户配置文件属性,例如:

  • 科目名称

  • 电子邮件

  • 网站

  • 入职日期等。

但这些属性可能不足以满足您的组织需求!

我们可以创建自定义用户配置文件属性来满足需求。在此特定场景中,我们需要添加一个类型为字符串的属性来存储 Facebook URL。

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

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

在出现的页面中,您可以看到“人员”、“同步”、“组织”、“我的网站设置”组。在“人员”组中,选择**管理用户属性**。

管理用户属性

此页面显示现有的用户配置文件属性。您可以看到属性列表,如下所示:

使用此屏幕,我们可以添加/编辑/删除属性。单击顶部的**新建属性**链接以添加**Facebook URL**属性。

在出现的页面中,输入详细信息,如下所示:

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

我们期望 Facebook URL 属性具有以下值:

  • https://#/UserA
  • https://#/UserA

设置属性值后,单击“确定”按钮保存更改。现在,我们的新属性应该已列在“属性”页面 >“自定义属性”部分。

管理用户配置文件

现在我们需要设置此属性的值。可以通过以下方式设置值:

  • 每位用户的我的网站 > 我的个人资料页面

  • 管理员通过中央管理

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

在出现的页面中,单击上面突出显示的“管理用户配置文件”链接。您将看到以下页面:

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

保存更改,并对几个配置文件重复此操作。

现在,我们已准备好分配了 Facebook URL 属性的足够配置文件。

创建 PowerShell 脚本

我们可以开始创建 PowerShell 脚本。可以使用 Windows 自带的编辑器来编写脚本。

脚本应包含以下活动:

  1. 枚举所有用户配置文件

  2. 将账户名、Facebook URL 写入屏幕

  3. 将账户名、Facebook URL 写入 HTML 文件

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

[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 = "https://";
$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()

代码解释如下:

前三行代表:

  • 添加命名空间

接下来的五行代表 SPSiteUserProfileManager 实例的创建

  • new-object 关键字在 C# 中代表 new 操作符

  • $ 符号用于创建变量

  • ProfileManager 实例上调用 GetEnumerator()

foreach 循环遍历 $AllProfiles 变量,并在其中:

  • 丢弃 Facebook URL 为空的配置文件

  • 使用属性账户名、Facebook URL 创建新对象

  • 将值分配给新对象

  • 将对象添加到数组

  • 将行写入屏幕(写入 HTML 在 foreach 循环之后进行)

请注意,以下语句将对象添加到数组:

  • $array += $obj

write-output 语句

  • 将文本写入输出屏幕(ISE 编辑器)

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

运算符

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 文件包括添加 <table><tr><td> 等 HTML 标签。名为 ConvertTo-HTML 的 PowerShell Cmdlet 帮助我们完成这项工作。

执行代码

您可以在 ISE 编辑器中执行代码,并在屏幕上查看结果。

生成的 HTML 文件将位于上面突出显示的文件夹中,并且因机器而异。在 Internet Explorer 中打开该文件,您可以看到以下结果。

至此,我们关于使用 PowerShell 生成 HTML 报告的文章就结束了。

参考文献

http://tinyurl.com/2bc72ce

摘要

在本文中,我们探讨了创建自定义用户配置文件属性以及使用 PowerShell 生成 HTML 报告的场景。总结来说,我们探讨了以下方面:

  • 用户配置文件服务应用程序

  • 创建自定义用户配置文件属性

  • PowerShell 比较运算符

  • 使用 PowerShell 进行 HTML 报告生成

源代码附件包含我们讨论过的脚本。

© . All rights reserved.