在Windows Powershell中使用.Net / UniObjects的U2工具包?

时间:2012-11-12 16:36:35

标签: powershell u2 unidata uniobjects u2netdk

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

我们正在实施基于MS Sharepoint构建的Ellucian Portal,对于该任务,我们需要从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框架,而且我似乎无法找到使用U2 .Net的任何权威示例Powershell的图书馆。这个论坛似乎是一个很好的资源,我所取得的进展是由于我在这里发现的帖子。如果任何人对U2和Powershell都有任何想法或专业知识,我很乐意听到你是否对如何使魔术发生了意见。

2 个答案:

答案 0 :(得分:1)

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

  1. 安装U2 Toolkit for .NET
  2. 请参阅已安装的.NET U2NETDK程序集
  3. 创建连接对象
  4. 创建命令对象
  5. 打开连接
  6. 执行ADO.NET命令(SELECT FIRST_NAME,SURNAME FROM MEMBERS)
  7. 获取数据。在PowerShell上写入数据
  8. 关闭连接。
  9. 如果你想使用UO.NET功能并且你想使用读取文件,UniCommand,SelectList,那么请参考U2.Data.Client.UO.UniFile,U2.Data.Client.UO.UniCommand等。

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

    enter image description here

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

答案 1 :(得分: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()

enter image description here