如何通过 Start-Process 调用 powershell.exe,然后使用其自己的参数调用脚本并捕获退出代码?

问题描述 投票:0回答:1

我无法弄清楚这个的语法,我有一个需要从另一个脚本调用的配置脚本。当我手动调用配置脚本时,它看起来像这样

config.ps1 -val1 "1234" -val2 "12.089"
。我需要使用 Start-Process 使用参数调用 config.ps1,并且不打开新窗口(非交互式)并捕获 config.ps1 的退出代码并等待它返回退出代码,然后再继续下一步.

这是我最近尝试过的

$process = Start-Process powershell.exe -FilePath "c:\config.ps1" -ArgumentList -val1 "1234" -val2 "12.089" -PassThru -WindowStyle Hidden -Wait;
powershell start-process
1个回答
0
投票

Daniel 的有用评论为基础。

您的代码的问题:

$process = Start-Process powershell.exe -FilePath "c:\config.ps1" -ArgumentList -val1 "1234" -val2 "12.089" -PassThru -WindowStyle Hidden -Wait

  • 您正在调用

    powershell.exe
    ,因此需要将其作为传递给
    Start-Process
    -FilePath
    参数的参数。

  • 其他所有内容 - 目标 PowerShell 脚本、

    c:\config.ps1
    及其参数 - 都必须传递给 -ArgumentList
     参数,如果需要,最好以嵌入引号的 
    single 字符串的形式完成。

因此,立即修复是(为简洁起见,省略

-WindowStyle Hidden

):

$process = Start-Process -PassThru -Wait -FilePath powershell.exe -ArgumentList @' -File "c:\config.ps1" -val1 "1234" -val2 "12.089" '@
请注意,虽然在这种特殊情况下省略 

-File
powershell.exe
参数,但 Windows PowerShell CLI 原则上
也会起作用 - 在这种情况下隐含 -Command,但有一个重要的区别:

    -File
  • 将脚本文件的退出代码作为
    powershell.exe
    进程的退出代码传递,而
    -Command
    仅报告
    abstract
    退出代码:任何非零 退出代码都会映射到 1
    
    
$process.ExitCode

然后反映脚本的退出代码。


退一步:

您的
    Start-Process
  • 调用使用
    -WindowStyle Hidden
    ,因此隐藏脚本生成的任何输出;如果您同样想隐藏直接调用中的所有输出,请将
    *>$null
    添加到上面的命令中。
    
        
© www.soinside.com 2019 - 2024. All rights reserved.