Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing PSRemotingJob Object as Parameter in Powershell 4.0

Tags:

powershell

I'm writing a Powershell Cmdlet for which I need to pass in a PSRemotingJob object as a parameter. The MCVE follows:

function My-Cmdlet {
    [CmdletBinding()]
    Param(
        [Parameter(Position=0,
                   Mandatory=$true,
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true)]
        [PSRemotingJob[]]$Job
    )

    BEGIN {}

    PROCESS {
        ForEach ($j in $Job) {
            $j
        }
    }

    END {}
}

The issue is that when I pass a job into the cmdlet, I get an error, as follows:

PS C:\Temp> Invoke-Command -AsJob -CN svr001 -Command {Start-Sleep 10} | My-Cmdlet
My-Cmdlet : Unable to find type [PSRemotingJob]. Make sure that the assembly that contains this type is loaded.
At line:1 char:63
+ Invoke-Command -AsJob -CN svr001 -Command {Start-Sleep 10} | My-Cmdlet
+                                                              ~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (PSRemotingJob:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound

PS C:\Temp>

I realize that this should be a simple matter of substituting the correct object type or fully-qualified object, but I've also tried using [System.Management.Automation.PSRemotingJob] with the same results.

I'm using Powershell 4.0.

like image 821
Deacon Avatar asked Jun 23 '16 15:06

Deacon


1 Answers

System.Management.Automation.PSRemotingJob is not public type and thus can not be expressed in PowerShell type syntax. But you can use its base public type instead: [System.Management.Automation.Job].

like image 123
user4003407 Avatar answered Nov 13 '22 08:11

user4003407