0

我正在运行一个调用 powershell 脚本的 Perl 脚本。有没有办法让我从中获得返回值?我试过类似的东西

my @output = "powershell.exe powershellscript.ps1;
foreach(@output)
{
   print $_;
}

我一无所获。我是否需要在 powershell 脚本中添加一些东西来推送返回值?

4

3 回答 3

3

尝试使用背杆,

my @output = `powershell.exe powershellscript.ps1`;
foreach (@output)
{
   print $_;
}
于 2013-06-14T17:11:09.677 回答
1

使用反引号运行并收集输出:

my @output = ` ...`

如果您也想要返回码(状态),请执行(例如):

perl -e '@output=`/bin/date`;print $?>>8,"\n";print "@output"'

有关解释返回码的更多信息,请参阅系统

附录

qx(STRING)您可以按照perlop中的说明使用反引号来代替有时读起来很烦人的反引号。这类似于在 shell 脚本中收集进程输出,在与 POSIX 兼容的 shell 中,可以使用古老的反引号进行捕获,或者使用OUTPUT=$(/bin/date).

于 2013-06-14T17:14:56.347 回答
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: $!";
于 2013-06-14T17:18:22.963 回答