2026年3月5日木曜日

ボツネタだった履歴が思った通りにできた…

昨日ボツネタの愚痴を書いたわけですが、ようやく解決しました。

なんとなくPowerShellのHistoryと実際の履歴は別物というのは感じていたのですが、ドキュメントを読み進めていくと、どのように動いているのかが分かりました。

分かったうえで、最初はC#を経由して触らないとダメかな?と考えてヘルパーとしてスクリプトモジュール(.psm1)でも作っておくのが便利かな?とか。

でも、もっと単純でした。

 [Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory()

を呼び出すだけで単純にPowerScriptのコンソール内で動いているPSReadLineの履歴に入れることができました。

これで、一連の動作内でまとめたスクリプト内で呼び出している内容を履歴に入れて、部分的に再実行させることがしやすくなりました。デメリットとしては不要な履歴が追記されるので履歴のトルグで遡るときに邪魔になりますが、現段階では処理を取りまとめただけなのでデメリットを感じることは無いでしょう。

このメソッドの実装はあくまでPSReadLineの履歴に記録されるだけなので、PowerShellのHistoryには干渉していないので、そこまで反映させる場合は別途Set-Historyなどを行う必要があるでしょう。

ただし、(Get-PSReadLineOption).HistorySavePathには保存されているようなので、それを回避する場合はもっと何か考えないとダメかも。

あと、コンソール以外の実行状態(VisualStudioCodeのコンソールとか)だとPSReadLineが実装が違っていてエラーがでたり、するのかな? 

まぁスッキリできたと。 

0 件のコメント:

コメントを投稿