我正在编写一个在 Linux 上运行的 powershell 脚本。此脚本的目的是运行 MS SQL Server 并显示其输出,但是当用户按下Ctrl+C或发生某些错误时,脚本会获取数据文件夹的副本,然后退出。
[CmdletBinding()]
PARAM (
[Parameter(ValueFromPipelineByPropertyName)]
[string] $Command,
[Parameter(ValueFromPipelineByPropertyName)]
[string] $Args
)
BEGIN {
Write-Output "started $PSScriptRoot"
$currentErrorLevel = $ErrorActionPreference
# [console]::TreatControlCAsInput = $true
}
PROCESS {
try {
$ErrorActionPreference = 'SilentlyContinue';
$IsSqlRunning = Get-Process -name "sqlservr";
if ($null -eq $IsSqlRunning) {
start-process "/opt/mssql/bin/sqlservr" -wait -NoNewWindow
}
}
catch {
$ErrorActionPreference = $currentErrorLevel;
Write-Error $_.Exception
}
}
End {
$ErrorActionPreference = $currentErrorLevel;
#do backup
Create-Backup "/opt/mssql/bin/data"
Write-Output "finishd!"
}
这个脚本有几个问题:
- 当我按Ctrl+C时,它会破坏主脚本,并且它永远不会到达
Create-Backup
脚本底部的部分。 - 如果我删除
-Wait
,那么脚本将不会显示 sql 日志输出
所以我首选的解决方案是使用-Wait
参数运行 sql 并阻止 powershell 在我按Ctrl+后退出代码C,而是Ctrl+C关闭 sql 实例
所以我正在寻找一种方法来实现两者。