如何使powershell作业返回所需的对象类型?

如何使powershell作业返回所需的对象类型?,powershell,jobs,start-job,Powershell,Jobs,Start Job,我试图使用powershell作业来构建TreeView对象并返回它,相反,每次作业结束时,我都会得到PSObject类型 我尝试过以多种方式返回TreeView对象,比如在返回行中的变量名之前添加[System.Windows.Forms.TreeView],或者作为数组的一部分,似乎没有任何内容返回预期的结果 $job=开始作业-脚本块{ 添加类型-AssemblyName System.Windows.Forms $Tree=新对象System.Windows.Forms.TreeView

我试图使用powershell作业来构建TreeView对象并返回它,相反,每次作业结束时,我都会得到PSObject类型

我尝试过以多种方式返回TreeView对象,比如在返回行中的变量名之前添加[System.Windows.Forms.TreeView],或者作为数组的一部分,似乎没有任何内容返回预期的结果

$job=开始作业-脚本块{
添加类型-AssemblyName System.Windows.Forms
$Tree=新对象System.Windows.Forms.TreeView
返回$Tree
}
等待作业$Job
$Output=接收作业$Job
$Output.GetType()
IsPublic IsSerial名称基类型
-------- -------- ----                                     --------
True PSObject System.Object

由于序列化/反序列化,您似乎无法从作业中获取活动对象。montonero,您确定没有一种方法可以实现这一点吗?也许使用不同的命令?iRon,如您所见,我在代码的最后一行使用了Receive Job,并在第二个代码块中显示了结果。@montonero是对的。观察尝试按预期类型强制转换
$Output
时出现的错误消息
[System.Windows.Forms.TreeView]$Output
您确实返回了一个TreeView对象,但由于您创建/返回它的方式,它被PowerShell打包。使用
$Output | Get Member
查看底层对象(
反序列化的.System.Windows.Forms.TreeView
)。您可以按常规方式访问所有预期属性:
$Output.Nodes
。注意,正如已经指出的,这不是一个“活动”对象,因为它已经作为作业的一部分进行了反序列化,因此会有一些限制(主要是缺少方法)@EnTm您可以像这样从.NET中尝试一些高级序列化类,尽管我自己没有尝试过。由于序列化/反序列化,您似乎无法从作业中获取活动对象。montonero,您确定没有一种方法可以实现这一点吗?也许使用不同的命令?iRon,如您所见,我在代码的最后一行使用了Receive Job,并在第二个代码块中显示了结果。@montonero是对的。观察尝试按预期类型强制转换
$Output
时出现的错误消息
[System.Windows.Forms.TreeView]$Output
您确实返回了一个TreeView对象,但由于您创建/返回它的方式,它被PowerShell打包。使用
$Output | Get Member
查看底层对象(
反序列化的.System.Windows.Forms.TreeView
)。您可以按常规方式访问所有预期属性:
$Output.Nodes
。请注意,正如已经指出的,这不是一个“活动”对象,因为它已作为作业的一部分进行反序列化,因此会有一些限制(主要是缺少方法)。@EnTm您可以像这样尝试.NET中的一些高级序列化类,尽管我自己没有尝试过。