Search code examples
windowspowershellcompowershell-2.0com+

Issues in installing COM + Component using PowerShell script


I'm trying to install COM + Component using powershell. But I'm getting following error.

Unable to find type [some.dll]. Make sure that the assembly that contains this 
type is loaded.

+     $comAdmin.InstallComponent("test", [some.dll]);
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (COMITSServer.dll:TypeName) [], Runtime 
   Exception
    + FullyQualifiedErrorId : TypeNotFound

and here is my powershell script:

Install COM + Components

  $comAdmin = New-Object -comobject COMAdmin.COMAdminCatalog;
    $comAdmin.InstallComponent("some", [some.dll]);
    #if an exception occurs in installing COM+  then display the message below
    if (!$?)
    {
        Write-Host "Unable to Install the COM+ Component. Aborting..."
        exit -1
    }

My powershell version is 4.0 Can someone please help me on this.

Thank you.


Solution

  • Square brackets in PowerShell indicate a type, like [string] or [int32] or [System.Array] or [System.Math]. The error message is complaining because you're telling PowerShell that COMITSServer.dll is a registered and loaded data type.

    Additionally, the InstallComponent method of COMAdminCatalog appears to me to have four arguments, not two. You should be able to confirm that by looking at the definition, but I don't know if v2.0 supports doing it like this:

    PS U:\> $comAdmin = New-Object -comobject COMAdmin.COMAdminCatalog
    PS U:\> $comAdmin | gm | where { $_.Name -eq 'InstallComponent' }
    
    
       TypeName: System.__ComObject#{790c6e0b-9194-4cc9-9426-a48a63185696}
    
    Name             MemberType Definition
    ----             ---------- ----------
    InstallComponent Method     void InstallComponent (string, string, string, string)
    

    As such, I would try this:

    $comAdmin.InstallComponent("ITSServerOO2", "COMITSServer.dll", "", "");
    

    That appears to be how the VB code here calls the same method:

    '  Open a session with the catalog.
    '  Instantiate a COMAdminCatalog object. 
    Dim objCatalog As COMAdminCatalog
    Set objCatalog = CreateObject("COMAdmin.COMAdminCatalog")
    
    [...]
    
    '  Install components into the application.
    '  Use the InstallComponent method on COMAdminCatalog. 
    '  In this case, the last two parameters are passed as empty strings.
    objCatalog.InstallComponent "MyHomeZoo","MyZoo.DLL","","" 
    

    Here is the class definition of that function, I believe, athough I'm not familiar enough with COM+ to know if COMAdminCatalog and ICOMAdminCatalog are the same.