我正在编写一个Mssql安装脚本,想要获取无人值守的Mssql安装结果。在我的PowerShell脚本中,我运行了以下命令:
$result = (start cmd "/c D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini && exit 0 || exit 1")
这个应该在失败时返回0,在通过时返回1。不幸的是,我没有得到任何输出。有什么想法吗?
我正在编写一个Mssql安装脚本,想要获取无人值守的Mssql安装结果。在我的PowerShell脚本中,我运行了以下命令:
$result = (start cmd "/c D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini && exit 0 || exit 1")
这个应该在失败时返回0,在通过时返回1。不幸的是,我没有得到任何输出。有什么想法吗?
与Start-Process
的替代方法是更加简洁的语法调用运算符&
。
& cmd.exe /c 'ping.exe doesnotexist && exit 0 || exit 1'
退出代码将被包含在内置的变量$LASTEXITCODE
中,因此:
Write-Host $LASTEXITCODE
这将包含程序运行的退出代码,因此您不必一定使用CMD.exe运行它,只需执行以下操作:
& ping.exe doesnotexist ; Write-Host $LASTEXITCODE
应用于您的命令行程序:
& cmd.exe /c 'D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini && exit 0 || exit 1'
或者只需:
& D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini
在这两种情况下,$LASTEXITCODE
应该为0表示成功,否则为非零值(如果外部程序编写正确的话)。
Start-Process
。 - Caleb Jaresstart
实际上是Start-Process
的别名,因此您需要查看它的文档,这与cmd.exe的start
非常不同。因此,您可以这样做:(Start-Process -FilePath "cmd.exe /c ..." -Wait -Passthru).ExitCode
start cmd "/c
部分时才有效。它对我起作用是因为我在我的 PowerShell 会话中尝试了两种方法。命令提示符仍然没有返回任何东西... - Caleb Jares也许有点晚了,但这能帮到你吗?
start /WAIT cmd.exe /C "YOUR-COMMAND-HERE" & if errorlevel 1 echo 'error occurred'
你也可以像这样显式地返回一个错误代码:
start /WAIT cmd.exe /C "YOUR-COMMAND-HERE & exit MY-ERROR-CODE" & if errorlevel 1 echo 'error occurred'
&&
的工作方式,而且在设置运行后,你不能选择exit 0
或exit 1
。你必须测试ERRORLEVEL
,通常是在批处理文件中完成,然后可以使用适当的错误代码退出。 - Ken White&&
运行左侧,如果它为假(命令失败),则运行&&
右侧。操作符优先级分组为(Left && Middle) || Right
。现在我想了想,如果||
是条件或者只运行到真值,那么我应该使用&
而不是||
。 - Caleb Jares