首页 > 解决方案 > Powershell中如何定义返回进程对象的方法的返回类型

问题描述

$proc = Start-Process -FilePath '.\ScheduledLogoff.bat' -ArgumentList $ManualAuthTimeout_min -PassThru -WindowStyle Hidden

上面的命令行返回 cmdlet 启动的进程的进程对象。

我需要创建一个MyClass可能返回进程对象的方法,但我不知道如何为我的方法定义返回类型。我该如何定义它?

只是为了上下文化:我的目标是启动第二个进程,然后通过管道(xml)在第三个进程中获取第二个进程的进程对象,该管道共享一个对象,该对象具有这个进程对象作为属性和更多其他一些属性。

class MyClass
{
    Hidden [???]$batProcessObj

    [???]get_batProcessObj()
    {
        $this.batProcessObj = get_from_xml
        return $this.batProcessObj
    }

    [void]send_batProcessObj($value)
    {
        $this.batProcessObj = $value
        update_xml($this)
    }
}

过程1:

$myObj = New-Object MyClass

#Creating process 2:
$proc = Start-Process -FilePath '.\ScheduledLogoff.bat' -ArgumentList $ManualAuthTimeout_min -PassThru -WindowStyle Hidden

$myObj.send_batProcessObj($proc)

过程3:

$myObj = New-Object MyClass

$Process2 = $myObj.get_batProcessObj()

标签: powershelloopprocess

解决方案


除非我误解了您的要求,否则使用参数时的结果Start-Process是 a 。[System.Diagnostics.Process]-PassThru

如果您指定 PassThru 参数,此 cmdlet 将生成 System.Diagnostics.Process 对象。否则,此 cmdlet 不会返回任何输出。

您可以根据上面的代码运行以下命令来检查这一点。

$proc.GetType().FullName

你的返回类型就是这样。

[System.Diagnostics.Process]get_batProcessObj()
{
    $this.batProcessObj = get_from_xml
    return $this.batProcessObj
}

推荐阅读