从 ISE 中编写部署脚本后,我们需要我们的持续集成(CI) 服务器能够自动运行它们,即从命令行或通过批处理文件。
我注意到以下调用之间存在一些显着差异:
powershell.exe -File Script.ps1
powershell.exe -Command "& '.\Script.ps1'"
powershell.exe .\Script.ps1
一些简单的例子:
- 使用时,错误的处理方式与ISE
-File
完全相同。 - 其他两个调用似乎忽略了该
$ErrorActionPreference
变量,并且没有Write-Error
在 try/catch 块中捕获。
使用pSake时:
- 最后两个电话完美地工作
- 使用 ISE 或
-File
参数将失败并出现以下错误:
The variable '$script:context' cannot be retrieved because it has not been set
每种语法的含义是什么,为什么它们的行为不同?理想情况下,我希望找到一种始终有效且行为类似于 ISE 的语法。