2017-08-04 61 views
0

我试图做一个自动化脚本,我根据不同的条件调用不同的命令(可执行文件,bats或cmdlet)。这些命令输出多行日志和进度。Powershell调用静态方法内的表达式输出

我想改善使用类的代码可重用性。但是,我不能从类方法中调用这些命令的输出。

例如,使用此代码:

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的输出将被在所述壳中所示我的主要功能调用命令,但如果我调用静态方法在主功能([Utils]::CallSomeExe())中将不会显示输出。

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

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

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

回答

0

当涉及到输出时,类遵循更传统的结构。您需要定义输出类型并显式返回。

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

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

+0

我相信这是我提出的解决方案,并表示将为我的问题做到这一点。因为如果我调用编译某些东西并编写自定义输出,警告或错误的命令,我希望能够看到输出。等待5或10分钟,以查看完整的输出,而不是针对我的情况的解决方案。 – ccarvalheiro