我正在运行一个调用powershell脚本的Perl脚本。我有办法从中获得回报价值吗?我尝试过与
类似的东西my @output = "powershell.exe powershellscript.ps1;
foreach(@output)
{
print $_;
}
我什么都没得到。我是否需要在powershell脚本中添加一些内容来推送返回值?
答案 0 :(得分:3)
尝试使用后挡板,
my @output = `powershell.exe powershellscript.ps1`;
foreach (@output)
{
print $_;
}
答案 1 :(得分:1)
使用反引号来运行和收集输出:
my @output = ` ...`
如果您也想要返回代码(状态),请执行(例如):
perl -e '@output=`/bin/date`;print $?>>8,"\n";print "@output"'
有关解释返回代码的详细信息,请参阅system。
<强>附录强>
代替反引号,有时候可能会令人烦恼,您可以使用perlop中所述的qx(STRING)
。这类似于在shell脚本中收集进程输出,在POSIX兼容的shell中,可以使用古老的反引号进行捕获,或者更可读地使用OUTPUT=$(/bin/date)
进行捕获。
答案 2 :(得分:1)
尝试使用命名管道:
open(PWRSHELL, "/path/to/powershell.exe powershellscript.ps1 |") or die "can't open powershell: $!";
while (<PWRSHELL>) {
# do something
}
close(PWRSHELL) or warn "can't close powershell: $!";