【问题标题】:Powershell invoke expression output inside static methodPowershell在静态方法中调用表达式输出
【发布时间】:2017-08-04 22:06:53
【问题描述】:

我正在尝试编写一个自动化脚本,根据不同的条件调用不同的命令(可执行文件、bats 或 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

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

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

我很困惑,因为这在函数内部有效,但在类内部无效。

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

【问题讨论】:

    标签: powershell


    【解决方案1】:

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

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

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

    【讨论】:

    • 我相信这是我提出的解决方案,并表示可以解决我的问题。因为如果我调用一个编译某些东西并编写自定义输出、警告或错误的命令,我想实时查看输出。等待 5 或 10 分钟才能看到完整的输出,这不是我的解决方案。
    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多