バッチファイルでできてPowerShellでできない事

バッチファイルが無くなればいいってネタを見かけた。
バッチファイルでできてPowerShellでできないのは即時応答・即時復帰。
実際どんなものなのか実証プログラムを作ってみた。

@echo off
cd /d "%~dp0"
GetTickCount
set LV=%ERRORLEVEL%
echo %LV%
exit /b %LV%
バッチファイル(.cmd)
$myPath = Split-Path $MyInvocation.MyCommand.Path -Parent
cd $myPath
.\GetTickCount.exe
$lec = $LASTEXITCODE
echo $lec
exit $lec
PowerShell(.ps1)

これをCreateProcess で呼び出して、戻ってくるまでの時間を GetTickCountで測定してみた。
1222184734
1222184734
cmd: 47ms
1222184781
1222184781
cmd: 31ms
1222186906
1222186906
ps1: 2125ms
1222188984
1222188984
ps1: 1922ms
バッチファイルは処理して0.05秒ほどで戻ってくる。
PowerShellは 2秒ほどかかるので即時実行とはならない。
バッチファイルは複数回実行すると更に早くなる。PowerShellは10%程の変化。

なので、PowerShellは色々できる反面、緻密な即時応答を要求されるような場面では使えない可能性がある。
これも、PowerShell が .Net Framework で出来てるのが原因なので、ネイティブ実装されれば問題なくなる可能性はあるのだが (・ω・)

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です