結論
処理を Try で囲み、Finally に終了する時の処理を書くと出来た
以下に PowerShell だけでなく、様々なプログラミング言語などでのシグナルハンドルの例があった
Handle a signal - Rosetta Code
環境
PS C:\Windows\system32> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.14393.2395
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14393.2395
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
やってみた
以下を参考にファイルを作ってみた
try
{
while(1){
Write-Output ('hi')
}
}
finally
{
Write-Output ('exit')
}
しかしながら、これだとCTRL+Cで終了した時に「exit」が表示されない
ただし、以下だとうまくいく
Handle a signal - Rosetta Code
$Start_Time = (Get-date).second
Write-Host "Type CTRL-C to Terminate..."
$n = 1
Try
{
While($true)
{
Write-Host $n
$n ++
Start-Sleep -m 500
}
}
Finally
{
$End_Time = (Get-date).second
$Time_Diff = $End_Time - $Start_Time
Write-Host "Total time in seconds"$Time_Diff
}
やってみる。
PS C:\Users\Administrator> .\mugen.ps1
Type CTRL-C to Terminate...
1
2
3
Total time in seconds 2
うまくいった。
よく見るとWrite-Output
とWrite-Host
という点が違う。
試しにWrite-Output
に変えてみたら「Total time in seconds 2」が表示されなくなった。
Write-Host
の方が直接的にはコンソール出力だから適切ということなのだろうか。
この辺りもし知見のある方など居ましたら教えて頂けますと幸いです。。。