Powershell returns an object to c#
I'd like to return an object from Powershell to C#, so c# uses the object inside the C# code to call any method and get a property from the object. 
For example, I have a powershell script which gets VMs from a host using HyperV module from [pshyperv.codeplex.com][1]. (This GetVM.ps1 is just example for explanation to return objects). 
Once I execute the powershell script from Execute(), then it returns the objects, I want to call any method of the objects from ttt().


1. Does it have possible solution to return objects from powershell to C#?
2. Can you correct something wrong in my sample codes(powershell,c#)?

Thank you,
spark.

Powershell
===========
    Param (
        [String]
        $vmHost = '.',
        [String]
        $vmName
    )
    Process{
        $private:scriptname = $local:myInvocation.MyCommand.Name     
        if  (($vmHost -eq '.' ) -and ($vmName -eq 'ITE'))
        {
            #Write-Output "Executing $private:scriptname on $vmHost"
        }
        try {
            return (Get-VM -Name $vmName -Server $vmHost)
        } catch {Write-Error "Unable to create a VM: $vmName"}
    }

C#
============

    public void ttt()
    {
        ...
        ret = ps.Execute(rs, "GetVM.ps1 -vmName 'ITE*'");
    
        Trace.WriteLine(ret[0].Name); 
    }
    
    
    public object Execute(Runspace runSpace, string command)
    {
        bool error = false;
        StringBuilder retStr = new StringBuilder();
    
        pipeline.Commands.AddScript(command);
    
        Collection<PSObject> results = pipeline.Invoke();
    
        foreach (object item in pipeline.Error.ReadToEnd())
        {
            error = true;
            strOutput.AppendLine(item.ToString());
            retStr.Append(item.ToString());
        }
    
        foreach (PSObject obj in results)
        {
            strOutput.AppendLine(obj.ToString());
            retStr.Append(obj.ToString());
        }
    
        strOutput.Append("\r\n");
    
        return results; 
    }

Execution Powershell Results:
=============================
    PS C:\CVS\IteExtensionCode\Virtualization\VirtualizationTest\Tools\Virtualization\Hyper-V\W2K8> .\GetVM.ps1 -vmName 'ITE*'  |gm
    
    
       TypeName: System.Management.ManagementObject#root\virtualization\Msvm_ComputerSystem
    
    Name                          MemberType    Definition
    ----                          ----------    ----------
    VMElementName                 AliasProperty VMElementName = ElementName
    RequestStateChange            Method        System.Management.ManagementBaseObject RequestStateChange(System.UInt16 RequestedState, System.String TimeoutPer...
    SetPowerState                 Method        System.Management.ManagementBaseObject SetPowerState(System.UInt32 PowerState, System.String Time)
    AssignedNumaNodeList          Property      System.UInt16[] AssignedNumaNodeList {get;set;}
    Caption                       Property      System.String Caption {get;set;}
    CreationClassName             Property      System.String CreationClassName {get;set;}
    Dedicated                     Property      System.UInt16[] Dedicated {get;set;}
    Description                   Property      System.String Description {get;set;}
    ElementName                   Property      System.String ElementName {get;set;}
    EnabledDefault                Property      System.UInt16 EnabledDefault {get;set;}
    EnabledState                  Property      System.UInt16 EnabledState {get;set;}
    HealthState                   Property      System.UInt16 HealthState {get;set;}
    IdentifyingDescriptions       Property      System.String[] IdentifyingDescriptions {get;set;}
    InstallDate                   Property      System.String InstallDate {get;set;}
    Name                          Property      System.String Name {get;set;}
    NameFormat                    Property      System.String NameFormat {get;set;}
    OnTimeInMilliseconds          Property      System.UInt64 OnTimeInMilliseconds {get;set;}
    OperationalStatus             Property      System.UInt16[] OperationalStatus {get;set;}
    OtherDedicatedDescriptions    Property      System.String[] OtherDedicatedDescriptions {get;set;}
    OtherEnabledState             Property      System.String OtherEnabledState {get;set;}
    OtherIdentifyingInfo          Property      System.String[] OtherIdentifyingInfo {get;set;}
    PowerManagementCapabilities   Property      System.UInt16[] PowerManagementCapabilities {get;set;}
    PrimaryOwnerContact           Property      System.String PrimaryOwnerContact {get;set;}
    PrimaryOwnerName              Property      System.String PrimaryOwnerName {get;set;}
    ProcessID                     Property      System.UInt32 ProcessID {get;set;}
    RequestedState                Property      System.UInt16 RequestedState {get;set;}
    ResetCapability               Property      System.UInt16 ResetCapability {get;set;}
    Roles                         Property      System.String[] Roles {get;set;}
    Status                        Property      System.String Status {get;set;}
    StatusDescriptions            Property      System.String[] StatusDescriptions {get;set;}
    TimeOfLastConfigurationChange Property      System.String TimeOfLastConfigurationChange {get;set;}
    TimeOfLastStateChange         Property      System.String TimeOfLastStateChange {get;set;}
    __CLASS                       Property      System.String __CLASS {get;set;}
    __DERIVATION                  Property      System.String[] __DERIVATION {get;set;}
    __DYNASTY                     Property      System.String __DYNASTY {get;set;}
    __GENUS                       Property      System.Int32 __GENUS {get;set;}
    __NAMESPACE                   Property      System.String __NAMESPACE {get;set;}
    __PATH                        Property      System.String __PATH {get;set;}
    __PROPERTY_COUNT              Property      System.Int32 __PROPERTY_COUNT {get;set;}
    __RELPATH                     Property      System.String __RELPATH {get;set;}
    __SERVER                      Property      System.String __SERVER {get;set;}
    __SUPERCLASS                  Property      System.String __SUPERCLASS {get;set;}
    ConvertFromDateTime           ScriptMethod  System.Object ConvertFromDateTime();
    ConvertToDateTime             ScriptMethod  System.Object ConvertToDateTime();
    
    
    PS C:\CVS\IteExtensionCode\Virtualization\VirtualizationTest\Tools\Virtualization\Hyper-V\W2K8> .\GetVM.ps1 -vmName 'ITE*'
    
    Host                      VMElementName             State        Up-Time (mS) Owner
    --------                  -------------             -----        ------------ -----
    T06CORE                   ITE                       Stopped      0
    T06CORE                   ITE2                      Stopped      0


  [1]: http://pshyperv.codeplex.com

Powershell returns an object to c#
===

I'd like to return an object from Powershell to C#, so c# uses the object inside the C# code to call any method and get a property from the object. 
For example, I have a powershell script which gets VMs from a host using HyperV module from [pshyperv.codeplex.com][1]. (This GetVM.ps1 is just example for explanation to return objects). 
Once I execute the powershell script from Execute(), then it returns the objects, I want to call any method of the objects from ttt().


1. Does it have possible solution to return objects from powershell to C#?
2. Can you correct something wrong in my sample codes(powershell,c#)?

Thank you,
spark.

Powershell
===========
    Param (
        [String]
        $vmHost = '.',
        [String]
        $vmName
    )
    Process{
        $private:scriptname = $local:myInvocation.MyCommand.Name     
        if  (($vmHost -eq '.' ) -and ($vmName -eq 'ITE'))
        {
            #Write-Output "Executing $private:scriptname on $vmHost"
        }
        try {
            return (Get-VM -Name $vmName -Server $vmHost)
        } catch {Write-Error "Unable to create a VM: $vmName"}
    }

C#
============

    public void ttt()
    {
        ...
        ret = ps.Execute(rs, "GetVM.ps1 -vmName 'ITE*'");
    
        Trace.WriteLine(ret[0].Name); 
    }
    
    
    public object Execute(Runspace runSpace, string command)
    {
        bool error = false;
        StringBuilder retStr = new StringBuilder();
    
        pipeline.Commands.AddScript(command);
    
        Collection<PSObject> results = pipeline.Invoke();
    
        foreach (object item in pipeline.Error.ReadToEnd())
        {
            error = true;
            strOutput.AppendLine(item.ToString());
            retStr.Append(item.ToString());
        }
    
        foreach (PSObject obj in results)
        {
            strOutput.AppendLine(obj.ToString());
            retStr.Append(obj.ToString());
        }
    
        strOutput.Append("\r\n");
    
        return results; 
    }

Execution Powershell Results:
=============================
    PS C:\CVS\IteExtensionCode\Virtualization\VirtualizationTest\Tools\Virtualization\Hyper-V\W2K8> .\GetVM.ps1 -vmName 'ITE*'  |gm
    
    
       TypeName: System.Management.ManagementObject#root\virtualization\Msvm_ComputerSystem
    
    Name                          MemberType    Definition
    ----                          ----------    ----------
    VMElementName                 AliasProperty VMElementName = ElementName
    RequestStateChange            Method        System.Management.ManagementBaseObject RequestStateChange(System.UInt16 RequestedState, System.String TimeoutPer...
    SetPowerState                 Method        System.Management.ManagementBaseObject SetPowerState(System.UInt32 PowerState, System.String Time)
    AssignedNumaNodeList          Property      System.UInt16[] AssignedNumaNodeList {get;set;}
    Caption                       Property      System.String Caption {get;set;}
    CreationClassName             Property      System.String CreationClassName {get;set;}
    Dedicated                     Property      System.UInt16[] Dedicated {get;set;}
    Description                   Property      System.String Description {get;set;}
    ElementName                   Property      System.String ElementName {get;set;}
    EnabledDefault                Property      System.UInt16 EnabledDefault {get;set;}
    EnabledState                  Property      System.UInt16 EnabledState {get;set;}
    HealthState                   Property      System.UInt16 HealthState {get;set;}
    IdentifyingDescriptions       Property      System.String[] IdentifyingDescriptions {get;set;}
    InstallDate                   Property      System.String InstallDate {get;set;}
    Name                          Property      System.String Name {get;set;}
    NameFormat                    Property      System.String NameFormat {get;set;}
    OnTimeInMilliseconds          Property      System.UInt64 OnTimeInMilliseconds {get;set;}
    OperationalStatus             Property      System.UInt16[] OperationalStatus {get;set;}
    OtherDedicatedDescriptions    Property      System.String[] OtherDedicatedDescriptions {get;set;}
    OtherEnabledState             Property      System.String OtherEnabledState {get;set;}
    OtherIdentifyingInfo          Property      System.String[] OtherIdentifyingInfo {get;set;}
    PowerManagementCapabilities   Property      System.UInt16[] PowerManagementCapabilities {get;set;}
    PrimaryOwnerContact           Property      System.String PrimaryOwnerContact {get;set;}
    PrimaryOwnerName              Property      System.String PrimaryOwnerName {get;set;}
    ProcessID                     Property      System.UInt32 ProcessID {get;set;}
    RequestedState                Property      System.UInt16 RequestedState {get;set;}
    ResetCapability               Property      System.UInt16 ResetCapability {get;set;}
    Roles                         Property      System.String[] Roles {get;set;}
    Status                        Property      System.String Status {get;set;}
    StatusDescriptions            Property      System.String[] StatusDescriptions {get;set;}
    TimeOfLastConfigurationChange Property      System.String TimeOfLastConfigurationChange {get;set;}
    TimeOfLastStateChange         Property      System.String TimeOfLastStateChange {get;set;}
    __CLASS                       Property      System.String __CLASS {get;set;}
    __DERIVATION                  Property      System.String[] __DERIVATION {get;set;}
    __DYNASTY                     Property      System.String __DYNASTY {get;set;}
    __GENUS                       Property      System.Int32 __GENUS {get;set;}
    __NAMESPACE                   Property      System.String __NAMESPACE {get;set;}
    __PATH                        Property      System.String __PATH {get;set;}
    __PROPERTY_COUNT              Property      System.Int32 __PROPERTY_COUNT {get;set;}
    __RELPATH                     Property      System.String __RELPATH {get;set;}
    __SERVER                      Property      System.String __SERVER {get;set;}
    __SUPERCLASS                  Property      System.String __SUPERCLASS {get;set;}
    ConvertFromDateTime           ScriptMethod  System.Object ConvertFromDateTime();
    ConvertToDateTime             ScriptMethod  System.Object ConvertToDateTime();
    
    
    PS C:\CVS\IteExtensionCode\Virtualization\VirtualizationTest\Tools\Virtualization\Hyper-V\W2K8> .\GetVM.ps1 -vmName 'ITE*'
    
    Host                      VMElementName             State        Up-Time (mS) Owner
    --------                  -------------             -----        ------------ -----
    T06CORE                   ITE                       Stopped      0
    T06CORE                   ITE2                      Stopped      0


  [1]: http://pshyperv.codeplex.com
