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

通过 Microsoft Office SharePoint Server 2007 自动化数据采集,借助 PowerShell 实现

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2008年1月1日

GPL3

3分钟阅读

viewsIcon

29533

在本文中,我们将介绍如何使用 Windows PowerShell 将连接到运行 Windows Server 2003 的服务器的数据采集设备生成的信息高效地集成到 Microsoft Office SharePoint Server 2007 中。

引言

在本文中,我们将介绍如何将连接到运行 Windows Server 2003 的服务器的数据采集设备(如 OCR 设备或图像扫描仪)生成的信息高效地集成到 Microsoft Office SharePoint Server 2007 中。集成有助于通过一个集中的载体公开分布在多个设备上的数据,该载体可供配备网络浏览器和网络连接的任何工作站访问。

我们使用了 Microsoft 的可扩展命令行界面 shell 和脚本语言 Windows PowerShell,它与 .NET 框架集成,可以轻松地将信息插入到各种 .NET 可访问的基础结构中,如 SQL Server、Exchange Server,以及本例中的 Office 2007 系统。我们将处理的数据类型是二进制图像,以及提供这些图像注释数据的 XML 文件。

背景

Microsoft Office SharePoint Server 2007 配合 Windows SharePoint Services 3.0,有助于组织为每位员工提供情报能力,使他们能够共享、管理和重用信息,以便团队做出更好的决策。在大多数组织中,这些信息以业务文档的形式存在,如 Word 文件或 Excel 电子表格。然而,组织数据也可以是图像、XML 文件以及日常业务中不常见的其他文档。

Office SharePoint Server 2007 平台提供了对已发布的 Microsoft Office 数据文件(如 Word 文档、Excel 电子表格等)的 Web 和编程访问,从而实现了数据的程序化重用,并可以轻松开发包含关键绩效指标、小部件和已发布 Office 数据文件的基于 Web 的仪表板。

使用代码

要使用以下代码,您必须在安装了 Microsoft Office SharePoint Server 2007 的同一台计算机上安装 PowerShell 1.0 或 2.0(可从 Microsoft 网站获取)。

此外,还需要通过 PowerShell 连接到 SharePoint 对象模型。

[System.Reflection.Assembly]::Load(“Microsoft.SharePoint,Version=12.0.0.0,
       Culture=neutral, PublicKeyToken=71e9bce111e9429c”);

我们将多个文件服务器映射为 SharePoint 服务器的网络驱动器后,就获得了对图像文件以及与每个图像文件相关的 XML 文件的访问权限。为方便本文讨论,图像文件是包含大量信息的大型地图。

下面的代码片段(每行末尾都有分号)将在一个 foreach 循环中使用,以实现以下目标:

  1. 从 XML 文件内的 XML 树中提取数据。
  2. 出于记账目的,将相同的信息插入到“自定义列表”中。
  3. 创建以每个 XML 文件中的信息进行品牌化的独立团队网站。
  4. 将图像文件插入到位于各个团队网站的文档库中。

我们使用以下方法解析 XML 文件(然后将内容导入到 Microsoft Office SharePoint Services 团队网站):

[xml] $myxmldoc = get-content image123-header.xml ;
$sitetitle = $myxmldoc.tree.imagecategory.title ;
$maptype = $myxmldoc.tree.imagecategory.maptype ;

我们使用以下函数将 XML 数据插入到将用于记账的自定义列表中。

$site = new-object microsoft.sharepoint.spsite(“http://site-to-upload-to.org”);
$web = $site.Openweb() ;
$entitychange = $web.lists[“MAPS”].Items.Add() ;
$entitychange[“Title”] = $sitetitle ;
$entitychange[“Location”] =”http://site-to-upload-to.org/sites/”+ $sitetitle ;
$entitychange[“Map Type”]  = $maptype ;
$entitychange.Update(); 
$site.Dispose();

要创建“站点”层级下的新团队网站,只需执行以下操作:

$site = new-object microsoft.sharepoint.spsite( “http://site-to-upload-to.org/sites/” )  ;
$site.Allwebs.Add(“sites/”+$sitetitle, $sitetitle, $sitetitle, [int]1033, “STS”, “”, “”) ;
$site.Dispose();

要在新创建的团队网站下创建新的文档库(一种 Web 文件夹,也是一种列表),请按以下步骤操作:

$site = new-object 
  microsoft.sharepoint.spsite(“http://site-to-upload-to.org/sites/” +$sitetitle) ;
$website = $site.OpenWeb() ;
$listtemplate = $website.ListTemplates[“Document Library”];
$listID = $website.Lists.Add(“Map”, “”, $listtemplate) ;
$list = $website.Lists.GetList($listID, $true) ;
$list.Title = “Map” ;
$list.OnQuickLaunch = $true;
$list.Update() ;

要在自定义列表中为默认值添加特殊的自定义字段,请执行以下操作(请注意,我们正在使用 XML 来创建自定义字段;否则,自定义字段的引入将很困难):

$list.Fields.AddFieldAsXml(“<Field Name=’Annotation Type’ 
                            DisplayName=’Annotation Type’ Type=’Text’ />”);
$list.Update();
$list.Fields[“Annotation Type”].DefaultValue = “Annotated” ;
$list.Fields[“Annotation Type”].Update();

最后,我们将文件从本地映射的网络驱动器(或本地文件夹)添加到我们最近生成的文档库中。

$webclient = new-object System.Net.WebClient ;
$webclient.Credentials = [System.Net.CredentialCache]::DefaultCredentials ; 
$webclient.UploadFile($uristring, “PUT”, $filepath ) ;
$webclient.Dispose();

因此,用户可以通过常规的 Web 浏览器访问 Microsoft Office SharePoint 门户,查看使用为记账目的创建的自定义列表之前上传的图像列表。从那里,最终用户可以从一个中心位置访问原本需要物理访问文件服务器或在各种限制条件下手动映射多个网络驱动器的那些数据。

关注点

PowerShell 在缩短开发时间方面发挥了重要作用。Microsoft Office SharePoint Server 2007 结合 PowerShell,实现了对位于物理上分散的数据存储中的数据的集中共享。

© . All rights reserved.