Я пишу сценарий PowerShell, работающий в Linux. Цель этого сценария - запустить 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
Поэтому мое предпочтительное решение - запустить sql с параметром -Wait
и предотвратить выход PowerShell из кода после того, как я нажму Ctrl + C, но вместо этого Ctrl kbd > + C закрыть экземпляр sql
Так что я ищу способ добиться и того, и другого.
Start-Process
без параметра-NoNewWindow
, использовать-RedirectStandardOutput
для записи вывода во временный файл и оценки или печати содержимого файла послеStart-Process
завершения. - person stackprotector   schedule 13.05.2020