バッチファイルでできてPowerShellでできない事
個人的には、「バッチファイル」早く無くなれ派。
— 横地啓史@IT infra (@ose_tweety) December 13, 2023
というかPowerShellで良いじゃんと。
バッチでできてPowershellでできないことってなんかあったっけ? https://t.co/hKJT5uOaYR
バッチファイルが無くなればいいってネタを見かけた。
バッチファイルでできてPowerShellでできないのは即時応答・即時復帰。
実際どんなものなのか実証プログラムを作ってみた。
@echo off cd /d "%~dp0" GetTickCount set LV=%ERRORLEVEL% echo %LV% exit /b %LV% |
$myPath = Split-Path $MyInvocation.MyCommand.Path -Parent cd $myPath .\GetTickCount.exe $lec = $LASTEXITCODE echo $lec exit $lec |
これをCreateProcess で呼び出して、戻ってくるまでの時間を GetTickCountで測定してみた。
1222184734 1222184734 cmd: 47ms 1222184781 1222184781 cmd: 31ms 1222186906 1222186906 ps1: 2125ms 1222188984 1222188984 ps1: 1922ms |
PowerShellは 2秒ほどかかるので即時実行とはならない。
バッチファイルは複数回実行すると更に早くなる。PowerShellは10%程の変化。
なので、PowerShellは色々できる反面、緻密な即時応答を要求されるような場面では使えない可能性がある。
これも、PowerShell が .Net Framework で出来てるのが原因なので、ネイティブ実装されれば問題なくなる可能性はあるのだが (・ω・)
Comments