Powershell在静态方法中调用表达式输出

时间:2017-08-04 14:02:40

标签: powershell

我正在尝试执行自动化脚本,根据不同的条件调用不同的命令(可执行文件,蝙蝠或cmdlet)。这些命令输出几行日志和进度。

我正在尝试使用类来提高代码的可重用性。但是,当从类方法中调用它们时,我无法获得命令的输出。

例如,使用此代码:

Class SomeClass
{
    static [void] CallSomeExe()
    {
        & "Path\To\SomeExe.exe" args
    }
}

`& "Path\To\SomeExe.exe" args` # Shows command output in shell

`[Utils]::CallSomeExe()` # Doesn't show any output in shell

如果我直接在main函数中调用命令(& "Path\To\SomeExe.exe" args),exe的输出将显示在shell中,但是如果我在main函数中调用静态方法([Utils]::CallSomeExe())没有输出。

显示日志的解决方案是捕获调用结果($out = & "Path\To\SomeExe.exe" args)并将其返回给main函数。但是,通常它是一个缓慢的进程并显示进度信息我更喜欢流式传输而不是在调用结束时等待所有输出。

我很困惑,因为它在函数内部工作,但不在类中。

从静态方法调用时,有没有办法让它显示输出?

1 个答案:

答案 0 :(得分:0)

在输出方面,类遵循更传统的结构。您需要定义输出类型并显式返回。

Class SomeClass
{
    static [string[]] CallSomeExe()
    {
        return & "Path\To\SomeExe.exe" args
    }
}

原始脚本中的[void]表示它不会返回输出。