Install-Module Microsoft.PowerShell.ConsoleGuiTools
code $profile
添加一下代码
# 按f7显示历史记录 function ocgv_history { $line = $null $cursor = $null [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor) $selection = $input | Out-ConsoleGridView -Title "Select CommandLine from History" -OutputMode Single -Filter $line if ($selection) { [Microsoft.PowerShell.PSConsoleReadLine]::DeleteLine() [Microsoft.PowerShell.PSConsoleReadLine]::Insert($selection) if ($selection.StartsWith($line)) { [Microsoft.PowerShell.PSConsoleReadLine]::SetCursorPosition($cursor) } else { [Microsoft.PowerShell.PSConsoleReadLine]::SetCursorPosition($selection.Length) } } } $parameters = @{ Key = 'F7' BriefDescription = 'ShowMatchingHistoryOcgv' LongDescription = 'Show Matching History using Out-ConsoleGridView' ScriptBlock = { param($key, $arg) # The arguments are ignored in this example Get-History | Sort-Object -Descending -Property Id -Unique | Select-Object CommandLine -ExpandProperty CommandLine | ocgv_history } } Set-PSReadLineKeyHandler @parameters $parameters = @{ Key = 'Shift-F7' BriefDescription = 'ShowMatchingGlobalHistoryOcgv' LongDescription = 'Show Matching History for all PowerShell instances using Out-ConsoleGridView' ScriptBlock = { param($key, $arg) # The arguments are ignored in this example $hist = [Microsoft.PowerShell.PSConsoleReadLine]::GetHistoryItems().CommandLine # reverse the items so most recent is on top [array]::Reverse($hist) $hist | Select-Object -Unique -First 1000 | ocgv_history } } Set-PSReadLineKeyHandler @parameters