powershell - Powershell 出错时恢复
问题描述
我在 powershell 脚本中有以下 foreach 循环:
foreach ($sqlScript in Get-ChildItem -path "$pathToScripts" -Filter *.sql | sort-object) {
Write-Host "Running Script " $sqlScript.Name
#Execute the query
switch ($removeComments) {
$true {
(Get-Content $sqlScript.FullName -Encoding UTF8 | Out-String) -replace '(?s)/\*.*?\*/', " " -split '\r?\n\s*go\s*\r\n?' -notmatch '^\s*$' |
ForEach-Object { $SqlCmd.CommandText = $_.Trim(); $reader = $SqlCmd.ExecuteNonQuery() }
}
$false {
(Get-Content $sqlScript.FullName -Encoding UTF8 | Out-String) -split '\r?\n\s*go\s*\r\n?' -notmatch '^\s*$' |
ForEach-Object { $SqlCmd.CommandText = $_.Trim(); $reader = $SqlCmd.ExecuteNonQuery() }
}
}
}
整个脚本用一个 catch/try 块包装,并且可以正常处理错误。
我现在有一个要求,如果其中一个文件(脚本)产生错误,循环将忽略它并继续下一个文件。
我可以使用嵌套的 catch try 块来执行此操作,还是有办法在错误时恢复循环?
解决方案
添加一个额外的 Try..Catch 可能是要走的路。例如,您可以ForEach-Object
按如下方式修改您的块:
Try {
$SqlCmd.CommandText = $_.Trim();
$reader = $SqlCmd.ExecuteNonQuery()
} Catch {
Write-Error "$($SqlCmd.CommandText) resulted in an error"
$_
}
请注意,块$_
内Catch
将包含发生的错误。执行后Catch
,脚本的其余部分应照常进行。
推荐阅读
- spring-boot - 是否可以使用 Shopware REST API 更新订单单个仓位的 statusIds?
- excel - 突出显示/提取包含特定值的行
- mysql - 如何从mysql中的不同关系表中获取多个数据
- c - Clang-format:如何以这种方式格式化 C 结构初始化程序
- java - 多个 RadioGroup 和 Radiobutton 创建问题
- angular - 为什么我的模拟服务属性在 Jasmine 单元测试中未定义?
- ios - 如何使用 OpenTok 在 IOS 应用中实现屏幕共享
- python - 将文本从 .txt 文件发送到电子邮件
- javascript - Qt Web 引擎中的“等待未定义”错误
- reactjs - 如何在反应中检查用户是否使用密码方法登录?