gpt4 book ai didi

powershell - 在PowerShell脚本中从Sqlcmd获取错误

转载 作者:行者123 更新时间:2023-12-02 23:52:27 26 4
gpt4 key购买 nike

我为政府客户工作,我们的部署由另一个承包商控制,后者要求我们提供Powershell脚本来运行数据库脚本。不幸的是,安全性很严格,并且我没有添加powershell snapins的权限,因此我必须使用良好的旧sqlcmd而不是Invoke-Sqlcmd。我遇到了因运行脚本而产生的错误要传递回Powershell的麻烦。

例如,假设在以下情况下,“02 test2.sql”有一个错误导致其无法运行。我想终止脚本,将消息记录到控制台,并将sqlcmd的输出记录到文件中。无论我如何尝试,PowerShell都无法识别sqlcmd故障。

function TerminateScript {
ECHO "Please email `"Production.log.txt`" to address@mail.com"
Read-Host -Prompt "Press Enter to exit"
exit 1
}

ECHO "Running `"01 test1.sql`"" | tee -a Production.log.txt
sqlcmd -r -b /S serverName /d dbName -i "01 test1.sql" >> Production.log.txt
if ($LASTEXITCODE -ne 0) {
Write-Error "Error occured while running `"01 test1.sql`". Terminating script."
TerminateScript
}

ECHO "Running `"02 test2.sql`"" | tee -a Production.log.txt
sqlcmd -r -b /S serverName /d dbName -i "02 test2.sql" >> Production.log.txt
if ($LASTEXITCODE -ne 0) {
Write-Error "Error occured while running `"02 test2.sql`". Terminating script."
TerminateScript
}

ECHO "Running `"03 test3.sql`"" | tee -a Production.log.txt
sqlcmd -r -b /S serverName /d dbName -i "03 test3.sql" >> Production.log.txt
if ($LASTEXITCODE -ne 0) {
Write-Error "Error occured while running `"03 test3.sql`". Terminating script."
TerminateScript
}

最佳答案

如果您仅将适当的输出流重定向到文件,则该方法应该有效。默认情况下,>>仅重定向成功流。错误流为2(2>>)。所有流都是*(*>>)。如果您只想重定向错误流和成功流,则可以将错误流发送到成功流,然后通过2>&1 >> Production.log.txt将成功流发送到您的文件。如果查询产生错误,$LastExitCode仍将提供1

示例:重定向所有流

ECHO "Running `"02 test2.sql`"" | tee -a Production.log.txt
sqlcmd -r -b /S serverName /d dbName -i "02 test2.sql" *>> Production.log.txt
if ($LASTEXITCODE -ne 0) {
Write-Error "Error occured while running `"02 test2.sql`". Terminating script."
TerminateScript
}

示例:重定向错误和成功流
sqlcmd -r -b /S serverName /d dbName -i "02 test2.sql" 2>&1 >> Production.log.txt

我知道这并不是您想要的,但这是另一种选择。您可以使用 Start-Process调用 sqlcmd并重定向错误和成功流。请记住,每次运行时输出文件都会被覆盖。如果没有错误,则 error.txt文件将为空。
Start-Process sqlcmd -ArgumentList "-r -b /S poc-vtxrtndb2 /d test -i `"02 test2.sql`"" -NoNewWindow -RedirectStandardError error.txt -RedirectStandardoutput log.txt
if (Get-Content error.txt) {
"There was an error in the script"
}

有关PowerShell输出重定向的更多信息,请参见 About_Redirection

关于powershell - 在PowerShell脚本中从Sqlcmd获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56504005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com