从Perl运行powershell并获取返回值

时间:2013-06-14 17:05:02

标签: perl powershell

我正在运行一个调用powershell脚本的Perl脚本。我有办法从中获得回报价值吗?我尝试过与

类似的东西
my @output = "powershell.exe powershellscript.ps1;
foreach(@output)
{
   print $_;
}

我什么都没得到。我是否需要在powershell脚本中添加一些内容来推送返回值?

3 个答案:

答案 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: $!";