1

我是芝加哥一所大学的开发人员,在 Unidata 7.2 上支持 Ellucian/Datatal 同事。我们最近从 Unix 上的 Unidata 转换为 Windows Server,并且有许多必须转换为新操作系统的提取 cron 作业。在那次转换期间,我被介绍到 MS Windows Powershell 脚本环境,并一直在使用它来自动化许多程序上碎片化的任务,这些任务被拆分并在不同的机器上异步执行。

我们正在实施基于 MS Sharepoint 的 Ellucian 门户,对于该任务,我们需要运行一个夜间作业,从我们的 HR 数据中刷新 MS Active Directory 属性。为了做到这一点,我整理了一个 Powershell 脚本来获取一个平面文件并更新 AD。然而,Powershell 脚本的美妙之处在于您可以在本地使用 .Net 框架对象。多年来,我使用 VB UniObjects 开发了许多应用程序和实用程序,这似乎是利用 Powershell 界面并将提取步骤直接构建到 AD 更新脚本中的绝佳机会,因此整个过程可以作为单个集成执行应用。

我已经从 Rocket 软件下载并安装了用于 .Net 的 U2 工具包,但我遇到了一个障碍,因为 Powershell 引用和实例化语法与任何 Visual Studio 语言都不同。尽管我已经取得了一些进展,并且能够与 U2.Data.Client 命名空间建立 U2 ADO 连接,但我仍然无法正确实例化 Native UniObjects U2.Data.Client.UO 对象。

我确信这只是正确引用库的一个简单问题,但我以前从未真正使用过 .Net 框架,而且我似乎找不到任何在 Powershell 中使用 U2 .Net 库的权威示例. 这个论坛似乎是一个很好的资源,我取得的进展归功于我在这里找到的帖子。如果有人对 U2 和 Powershell 有任何想法或专业知识,我很想听听您是否对如何使魔术发生有意见。

4

2 回答 2

1

谢谢你问这个问题。您可以从 Windows PowerShell 非常轻松地调用 U2 Toolkit for .NET (U2NETDK)。请参阅随附的屏幕截图。我做了以下事情:

  1. 为 .NET 安装 U2 工具包
  2. 请参阅已安装的 .NET U2NETDK 程序集
  3. 创建连接对象
  4. 创建命令对象
  5. 打开连接
  6. 执行 ADO.NET 命令 (SELECT FIRST_NAME, SURNAME FROM MEMBERS)
  7. 获取数据。在 PowerShell 上写入数据
  8. 关闭连接。

如果您想使用 UO.NET 功能并且您想使用读取文件、UniCommand、SelectList,请参考 U2.Data.Client.UO.UniFile、U2.Data.Client.UO.UniCommand 等。

我希望这个例子也能帮助其他 U2 .NET 用户。

在此处输入图像描述

请参阅此示例:http: //blogs.technet.com/b/threekings/archive/2008/07/18/ado-net-in-powershell-update-sql-data-example-sample.aspx

于 2012-11-12T17:35:35.410 回答
0

感谢您试用 U2NETDK 的 ADO.NET 和 windows PowerShell。对于 Native Access (Uniobjects API),您不需要 UODOTNET.DLL。我们在 U2NETDK 中嵌入了 Uniobjects API。因此,您将引用 U2.Data.Client 和 U2.Data.Client.UO 命名空间。请参阅下面的脚本和屏幕截图。

Add-Type -Path "C:\Program Files (x86)\Rocket Software\U2 Toolkit for .NET\U2 Database Provider\bin\.NETFramework\v2.0\U2.Data.Client.dll"

$Connection = New-Object U2.Data.Client.U2Connection

$Connection.ConnectionString = "Database=XDEMO;User ID=administrator;Password=pass;Server=9.72.199.235;Persist Security Info=True;ServerType=universe;AccessMode=Native"

$Connection.Open()

$Session = $Connection.UniSession

$UniSelectList  =$Session.CreateUniSelectList(2);

$UniFile  = $Session.CreateUniFile("PRODUCTS");
$UniSelectList.Select($UniFile);

while (!$UniSelectList.LastRecordRead)
{
$sRecID = $UniSelectList.Next();
write-host $sRecID
}
$Connection.Close()

在此处输入图像描述

于 2012-11-19T03:02:08.643 回答