Powershell在静态方法内调用表达式输出
我正在尝试执行一个自动化脚本,根据不同的条件调用不同的命令(可执行文件、BAT或cmdlet)。这些命令输出几行日志和进度 我正在尝试使用类来提高代码的可重用性。但是,当从类方法内部调用这些命令时,我无法获得命令的输出 例如,使用此代码:Powershell在静态方法内调用表达式输出,powershell,Powershell,我正在尝试执行一个自动化脚本,根据不同的条件调用不同的命令(可执行文件、BAT或cmdlet)。这些命令输出几行日志和进度 我正在尝试使用类来提高代码的可重用性。但是,当从类方法内部调用这些命令时,我无法获得命令的输出 例如,使用此代码: Class SomeClass { static [void] CallSomeExe() { & "Path\To\SomeExe.exe" args } } `& "Path\To\SomeExe.
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
)并将其返回到主函数。然而,由于它通常是一个缓慢的过程,并且显示进度信息,我更愿意流式处理它,而不是在调用结束时等待所有的输出
我很困惑,因为它在函数中工作,但在类中不工作
当从静态方法调用时,有没有办法让它显示输出?类在输出时遵循更传统的结构。您需要定义输出类型并显式返回
Class SomeClass
{
static [string[]] CallSomeExe()
{
return & "Path\To\SomeExe.exe" args
}
}
原始脚本中的
[void]
表示它不返回输出。我相信这就是我提出的解决方案,并说它可以解决我的问题。因为如果我调用一个编译某些内容并写入自定义输出、警告或错误的命令,我希望看到实时输出。等待5或10分钟以查看完整输出,这不是我的案例的解决方案。