powershell - 处理 powershell 工作流和循环中的错误
问题描述
我有一个循环服务器列表的 Ps 脚本,但是错误处理的行为不像我期望的那样。invoke-sqlcmd 已设置为在出错时继续,这是故意的,因为在遍历服务器列表时,我不希望它在每次遇到错误时都停止。另一方面,我想知道是否有错误。
我选择做的是将 erroractionpreference 设置为在脚本中继续,但将 invoke-sqlcmd 命令设置为停止。这在 powershell 工作流程之外运行良好,但在 PS 工作流程中它会产生不良影响,即如果我从控制台运行 powershell 脚本,如果错误操作设置为继续,我看不到任何错误,如果设置为停止,那么我可以查看错误。
在下面的示例中,我取出了 try catch,因为它掩盖了错误。
Workflow RunDeployment
{
$file_list = @("deployment_1.sql","deployment_2.sql","deployment_3.sql","deployment_4.sql","deployment_5.sql")
$x = (1,"localhost\DEV2",3,1),(4,"localhost\DEV2",6,2),(3,"localhost\DEV2",4,3)
$k = 'serverid','servername','locationid','appid'
$h = @{}
For($i=0;$i -lt $x[0].length; $i++){
$x |
ForEach-Object{
[array]$h.($k[$i]) += [string]$_[$i]
}
}
$folder = "C:\Temp\"
$database_name = "Test"
$all_server_ids = $h['serverid']
foreach -parallel ($server_id in $all_server_ids)
{
$ErrorActionPreference = 'Continue'
$severid = $h["serverid"][$all_server_ids.indexof($server_id)]
$servername = $h["servername"][$all_server_ids.indexof($server_id)]
$locationid = $h["locationid"][$all_server_ids.indexof($server_id)]
foreach ($file in $file_list)
{
$release_file = "$folder$file"
write-output "The file is $release_file "
# try {
invoke-sqlcmd -ServerInstance "$servername" -inputfile $folder$file -Database "$database_name" -Querytimeout 60 -OutputSqlErrors $true -ConnectionTimeout 10 -ErrorAction Stop -Errorvariable errorvalue
# write-output "-ServerInstance $servername -inputfile $folder$file -Database $database_name -Querytimeout 60 -OutputSqlErrors $true -ConnectionTimeout 10 -ErrorAction Stop -Errorvariable errorvalue"
# if ($errorvalue){
# write-output "Error encountered see $errorvalue" }
# }
# Catch{
# $error_message = $_.Exception.Message
# write-output $error_message
# write-output $error
# }
}
}
}
RunDeployment
解决方案
推荐阅读
- php - 通过 id 调用图像 (php)
- sweetalert - SweetAlert2 可以通过 chrome 扩展在浏览器 pdf 查看器上使用吗?
- scala - Flyway 在 sbt 中找不到我的迁移文件
- mysql - 为什么由于未能正确排序结果而导致我的顺序不区分大小写?
- c++ - 复制所有超类构造函数
- git - git auto merge abort 面临的问题
- sql - 合并sql中的列
- javascript - 无法访问 img 元素的 innerHTML 属性
- postman - Postman eval() - 如何评估 Json 的属性部分
- debian - 如何在 Debian VPS 上启用 TUN?