Help us understand the problem. What is going on with this article?

このコマンドレット、この前 PowerShell で実行した、ような・・・・・・

More than 5 years have passed since last update.

こんなの絶対おかしいよ!

Powershell で、いろいろ操作して、昨日打ったコマンドを、また実行できると、それはとっても嬉しいなって思うのですが、Powershell を一旦終了してしまうと履歴が保存されずに消えてしまっています。。。

それでもいいの?
さっき打ったコマンドレットを忘れちゃうのに?
さっき打ったコマンドレットのこと、もう二度と感じ取ることさえ出来なくなっちゃうのに??

履歴保存も、履歴補完も、あるんだよ

がんばれば、きちんとした履歴保存機能を作ることができるでしょうが、
できるだけがんばらずに、履歴保存する方向で。

履歴保存も、あるんだよ

  • $Profile の中の function PromptExport-Csv -Path ~\.posh_history.csv -InputObject (Get-History)[-1] -Append を追記
  • ただし、 exit 以外の方法で終了してしまうと、最後に実行した履歴が残らない(終了イベントとかで保存すればいいけど面倒。そこまでするなら、プラグイン化するか、既存のものを使いたい
  • あと、コマンドなしで Enter を連打してしまうと同じ履歴が、いっぱい残ってしまう(面倒。そこまでするなら(以下略
  • PowerShell 3.0 以上じゃないと、 Export-Csv に -Append オプションがないので、Out-File コマンドで、csv に追記する(初回にヘッダありのファイルを作成しなければならない。。。3.0に比べて、かなり面倒。。。) PowerShell 2.0 のことは忘れましょう
# 2.0 向け(PowerShell 2.0 のことは忘れましょう
if (-not (Test-Path ~\.posh_history.csv)) {
    "#TYPE Microsoft.PowerShell.Commands.HistoryInfo" | Out-File ~\.posh_history.csv -encoding UTF8
    '"Id","CommandLine","ExecutionStatus","StartExecutionTime","EndExecutionTime"' | Out-File ~\.posh_history.csv -encoding UTF8 -append
}
$h = (Get-History)[-1]
$csv = "`"$($h.Id)`",`"$($h.CommandLine)`",`"$($h.ExecutionStatus)`",`"$($h.StartExecutionTime)`",`"$($h.EndExecutionTime)`""
$csv | Out-File ~\.posh_history.csv -encoding UTF8 -append

履歴読込も、するんだよ

  • $Profile に Import-Csv ~\.posh_history.csv | Add-History を追記

履歴補完も、あるんだよ

  • #検索したい文字列<Tab>

$Env
function Prompt {
    # PowerShell 3.0+
    Export-Csv -Path ~\.posh_history.csv -InputObject (Get-History)[-1] -Append
    return "$pwd > "
}

Import-Csv ~\.posh_history.csv | Add-History

参考

追記

はやく Windows 10 に移行しましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away