作者:强悍的梅子 | 来源:互联网 | 2022-12-17 10:24
在Powershell控制台中,在Windows 10(10.0.17134.0)上,F7不会像对CMD控制台那样弹出命令历史记录。有没有解决的办法?
1> Bill_Stewart..:
正如您所发现的,这是因为Windows 10上默认安装了PSReadline模块。您可以F7通过Set-PSReadlineKeyHandler
在脚本中使用cmdlet在PSReadline中添加自己的模块。例:
Set-PSReadlineKeyHandler -Key F7 -BriefDescription "History" -LongDescription "Show command history" -ScriptBlock {
$pattern = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref] $pattern, [ref] $null)
if ( $pattern ) {
$pattern = [Regex]::Escape($pattern)
}
$history = [System.Collections.ArrayList] @(
$last = ""
$lines = ""
foreach ( $line in [System.IO.File]::ReadLines((Get-PSReadlineOption).HistorySavePath) ) {
if ( $line.EndsWith('`') ) {
$line = $line.Substring(0, $line.Length - 1)
$lines = if ( $lines ) { "$lines`n$line" } else { $line }
continue
}
if ( $lines ) {
$line = "$lines`n$line"
$lines = ""
}
if ( ($line -cne $last) -and ((-not $pattern) -or ($line -match $pattern)) ) {
$last = $line
$line
}
}
)
$command = $history | Out-GridView -Title History -PassThru
if ( $command ) {
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
[Microsoft.PowerShell.PSConsoleReadLine]::Insert(($command -join "`n"))
}
}
使用此功能时,该F7键将显示在弹出的网格视图窗口中。选择一个历史记录条目,然后按Enter,PowerShell会将其放在命令行上进行编辑。
上面的代码块的末尾还有一个额外的`}`。编辑出来会很好。