0
PowerShellセッションでSAP/BusinessObjects Universe Design Tool(UDT)を使用しようとしています。PowerShellを使用してCOMオブジェクトのインスタンスを作成
私は、タイプライブラリを登録:
C:\> C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12.exe "C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\designer.tlb
私が直接PowerShellでデザイナーのインスタンスを作成しようとしました:
PS> $app = New-Object -ComObject Designer.Application
System.__ComObject
インスタンスが期待されるプロパティとメソッドのいずれかを持っていません:
PS> $app | get-member
TypeName: System.__ComObject
Name MemberType Definition
---- ---------- ----------
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetLifetimeService Method System.Object GetLifetimeService()
GetType Method type GetType()
InitializeLifetimeService Method System.Object InitializeLifetimeService()
ToString Method string ToString()
次に、私はC#を作成しました。
[System.Management.Automation.Cmdlet(System.Management.Automation.VerbsCommon.Open, "Universe")]
[OutputType(typeof(Designer.Universe))]
public class OpenUniverse : System.Management.Automation.Cmdlet
{
Designer.Application application = null;
[System.Management.Automation.Parameter(Position = 0, Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true)]
[Alias("FullName")]
public string[] Paths
{
get { return paths; }
set { paths = value; }
}
private string[] paths;
protected override void BeginProcessing()
{
application = new Application();
application.Interactive = false;
try
{
application.Logon("user", "password", "cluster", "secWinAd"); }
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
} # /BeginProcessing
protected override void ProcessRecord()
{
Designer.Universe universe = null;
try
{
foreach (string path in Paths)
{
universe = application.Universes.Open(path);
WriteObject(universe);
}
}
catch (System.Runtime.InteropServices.COMException e)
{
# ...
}
finally
{
if (universe != null) { universe.Close(); }
}
} # /ProcessRecord
} #/OpenUniverse
Visual Studio 2010テストで実行すると、コードは予想されるオブジェクトを返します。
プロジェクトで作成したアセンブリを参照するマニフェストを作成し、モジュールを新しいPowerShellセッションにインポートしました。
PS> $unv = Open-Universe 'C:\Users\XXX\AppData\Roaming\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\Universes\Foo.unv'
PS> $unv
System.__ComObject
System.__ComObject
インスタンスのプロパティとメソッドを生成するためのPowerShellの反射を取得する方法はありますか?
[関連](http://stackoverflow.com/questions/20248032/use-powershell-to-wrap-an-existing-com-object) – craig