powershell - 如何检查 foreach 循环中的错误代码?
问题描述
我需要为数据库逻辑转储制作一个简单的脚本。使用脚本的目的有两个。
- 如果我使用参数(数据库名称)运行它,它将创建这些数据库的逻辑转储。
- 如果我在没有参数的情况下运行,它将启动数据库列表(硬编码)的命令。
我想检查循环pg_dump
内每个命令 start ( )的错误代码foreach
,记录并继续。最好的方法是什么?
到目前为止,我发现我可以使用try
and catch
。
旁注:在我的代码try..catch
中,出于测试目的,我只尝试了一次。
$path = '"C:\Program Files\PostgreSQL\version\bin\pg_dump.exe"'
$backup_path = 'D:\Backups\test\'
$limit = (Get-Date).AddDays(-2)
$logdate = (Get-Date).ToString("yyyy-MM-dd")
$pg_suffix = "pg_dump"
#$LogFile = $backup_path\$pg_suffix_$(Get-Date -f yyyy-MM-dd) + '.log'
$pg_dump_error = "pg_dump has failed"
$p = $args
[array]$DB_Array = @('postgres', 'db02', 'db03')
if ($p -ne $null) {
try {
foreach ($DB in $p) {
$backup_path_temp = $backup_path + $DB + '_' + $(Get-Date -f yyyy-MM-dd) + '.backup'
cmd /c "$path -w -h localhost -U postgres -Z3 -Fd -j 12 -f $backup_path_temp $DB"
}
} catch {
#"Error! $pg_dump_error" | Tee-Object -FilePath $LogFile -Append | Write-Error }
Write "Error: $file.name: $_" >>D:\\Backups\logfile.txt
}
continue;
} else {
foreach ($DB in $DB_Array) {
$backup_path_temp = $backup_path + $DB + '_' + $(Get-Date -f yyyy-MM-dd) + '.backup'
cmd /c "$path -w -h localhost -U postgres -Z3 -Fd -j 12 -f $backup_path_temp $DB"
}
}
# Delete files older than the $limit.
Get-ChildItem -Path $backup_path -Force |
Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } |
Remove-Item -Force -Recurse
解决方案
使用$LastExitcode
自动变量在 PowerShell 中获取可执行文件的退出代码。
推荐阅读
- excel - 嵌套循环'FOR' - Excel VBA
- python - 此表达式不支持 SQLAlchemy 运算符“getitem”
- python - 递归分组python DataFrame的行和列
- python - 如何使用网格 tkinter 将画布框架扩展到根主窗口?
- macos - 是否有任何自动化脚本可以在睡眠后取消选中“需要密码”并在 Mac 中关闭睡眠?
- linux - awk脚本,统计+value和-value的个数
- email - Nginx:邮件指令的配置日志
- ssl - 添加新的控制平面节点失败 k8s 1.21.0 [已解决]
- java - Courgette-JVM 在测试之间共享数据
- javascript - 静态 HTML - 使用 jquery.i18n.js 的本地化不起作用