2017-01-30 9 views
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の反射を取得する方法はありますか?

+0

[関連](http://stackoverflow.com/questions/20248032/use-powershell-to-wrap-an-existing-com-object) – craig

答えて

0

PowerShellは、インスタンスのプロパティとメソッド(遅延バインディング)を表示できるため、COMインスタンスはITypeInfoインターフェイスを実装する必要があります。

関連する問題