首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell PSReadLine历史

Powershell PSReadLine历史
EN

Stack Overflow用户
提问于 2018-12-14 15:01:14
回答 2查看 4.1K关注 0票数 2

我对Powershell中的PSReadLine历史如何跨会话工作感到困惑。在PSVersion5.1中,我可以看到我以前的命令历史记录自动存储在

代码语言:javascript
复制
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\

但是,如果我运行get-history,我只看到我当前的会话命令历史记录。我认为在Powershell的后期版本中不再需要钩子来保存跨会话的命令历史记录。我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2018-12-14 15:25:53

该文件

代码语言:javascript
复制
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

只包含输入的命令(这里是ATM22k行),

以及本届会议的历史

代码语言:javascript
复制
Get-History | Format-List -Property *
代码语言:javascript
复制
Id                 : 88
CommandLine        : get-help Get-History -online
ExecutionStatus    : Completed
StartExecutionTime : 2018-12-14 16:16:49
EndExecutionTime   : 2018-12-14 16:16:49

是完全不同的东西。

票数 3
EN

Stack Overflow用户

发布于 2020-07-01 09:59:11

获取历史记录访问PowerShell历史记录(仅用于当前会话)。

PSReadLine使用自己的历史记录(在内存中,并保存在(Get-PSReadLineOption).HistorySavePath中)。使用PSReadLine输入的命令(通常)在输入时会附加到历史文件中(也可以使用Set-PSReadLineOption -HistorySaveStyle控制这种行为)。然后,各种搜索和导航键可以将任何历史记录条目带到当前命令行。注意,当使用向上箭头或向下箭头访问历史记录时,将跳过来自并发会话(即在当前会话启动后输入的命令)的新命令(设计决策)。然而,这些命令可以使用历史搜索函数(F8、SHIFT-F8、CTRL和CTRL)访问。不幸的是,您无法在搜索后使用向下箭头检索您搜索的命令列表。

如果确实需要使用箭头键从其他会话访问较新的命令,则可以启动一个新会话,但随后将丢失(访问)当前会话中的任何变量(和新输入的函数)。一种解决方案可以是使用export-clixml来传输一些(全部?)变量/函数,方法是创建一个哈希表,按变量/函数的名称键,然后使用import-clixml并在新会话中重新创建由此产生的哈希表中的变量/函数。但是,根据要传输的数据的类型和数量,临时文件可能很大,导出非常慢,而且只能获得可见数据,因此可能会丢失方法(因为它们可以依赖内部隐藏的成员,无法复制)。

另一种办法是在本届会议上简单地重建历史,具体如下:

代码语言:javascript
复制
[Microsoft.Powershell.PSConsoleReadLine]::ClearHistory()
$nulhist=($histfile=(Get-PSReadLineOption).HistorySavePath)+".NUL"
Set-PSReadLineOption -historysavepath $nulhist
(gc -raw $histfile) -split "[^```r]`r?`n" | foreach {[Microsoft.Powershell.PSConsoleReadline]::AddToHistory($_) }
Set-PSReadLineOption -HistorySavePath $histfile
Remove-Item $nulhist

我们的想法是清除这个会话的内存历史记录(ClearHistory()不影响历史文件),然后再次添加历史文件的全部内容,确保跨越多行的命令保持完整。需要临时文件,因为添加会话历史记录条目也会将其添加到历史文件中。不幸的是,这也不是特别快,但至少它维护了您的变量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53782159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档