使用“-command”参数而不是“-file”调用 Powershell 脚本

Calling a Powershell script with the "-command" parameter instead of "-file"

像这样调用powershell脚本有什么区别:

powershell.exe -file "myfile.ps1"

像这样(也有效):

powershell.exe -command "myfile.ps1"

谢谢,罗伯特

运行 powershell.exe -File 将 return 脚本设置的退出代码,而 运行 powershell.exe -Command 将 return 1 如果脚本以非零退出代码终止,否则为 0。

C:\><b>type "C:\path\to\test.ps1"</b>
exit 5

C:\><b>powershell.exe -command "C:\path\to\test.ps1"</b>

C:\><b>echo %errorlevel%</b>
<i>1</i>

C:\><b>powershell.exe -file "C:\path\to\test.ps1"</b>

C:\><b>echo %errorlevel%</b>
<i>5</i>

powershell.exe -file "myfile.ps1" — 这意味着:启动 PowerShell 并在全局范围内执行文件 myfile.ps1(文件名被认为是相对于当前目录的)。
powershell.exe -command "myfile.ps1" — 这意味着:启动 PowerShell 并执行命令 myfile.ps1,PowerShell 允许您通过在命令行中键入脚本文件的名称来执行脚本文件。

差异:

  1. 在没有点源运算符的情况下. myfile.ps1 PowerShell 在命令解析为脚本文件时创建新范围。
  2. PowerShell 不会在当前目录中查找命令源。因此,如果文件 myfile.ps1 驻留在当前目录中,而当前目录不在 PATH 环境变量中,则 PowerShell 无法找到 myfile.ps1 命令。
  3. 如果文件 myfile.ps1 可以在当前目录之前的 PATH 环境变量中提到的任何目录中找到,那么 myfile.ps1 命令将解析到该文件而不是文件 myfile.ps1 在当前目录中。
  4. 您可以在您的配置文件中创建别名,例如 New-Alias myfile.ps1 DoSomethingElse,在这种情况下,myfile.ps1 命令将被视为对该别名而不是 myfile.ps1 文件的引用。