rooni Asked: 2024-12-17 22:27:47 +0800 CST2024-12-17 22:27:47 +0800 CST 2024-12-17 22:27:47 +0800 CST 当未安装 PSReadLine 时,PowerShell 是否会保存所有命令/输出的持久历史记录?如果是,那么这些历史记录存储在哪里? 772 当未安装 PSReadLine 时,PowerShell 是否会保存所有命令/输出的持久历史记录?如果是,那么这些历史记录存储在哪里? windows 2 个回答 Voted Best Answer Paul π 2024-12-20T03:51:41+08:002024-12-20T03:51:41+08:00 简短的回答是,不是,不是原生的。 引用 PowerShell 的about_History帮助文档: PowerShell 有两个不同的历史记录提供程序:内置历史记录和PSReadLine 模块管理的历史记录。 使用 PSReadLine 历史记录 PSReadLine 历史记录跟踪所有 PowerShell 会话中使用的命令。历史记录将写入每个主机的中央文件。该历史记录文件可供所有会话使用,并包含所有过去的历史记录。会话结束时不会删除历史记录。此外,该历史记录无法通过 *-History cmdlet 管理。有关详细信息,请参阅about_PSReadLine。 使用内置会话历史记录 内置历史记录仅跟踪当前会话中使用的命令。其他会话无法访问该历史记录,会话结束时该历史记录将被删除。 命令 别名 描述 Get-History 时长 获取命令历史记录。 Invoke-History r 运行命令历史记录中的命令。 Add-History 将命令添加到命令历史记录中。 Clear-History 克利 从命令历史记录中删除命令。 PSReadLine 历史记录PSReadLineHistory (Get-PSReadlineOption).HistorySavePath将检索当前 PowerShell 主机的历史文件路径。 PSReadLine 将持久历史文件存储在默认目录中%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ ConsoleHost_history.txt Visual Studio Code Host_history.txt ETC Destroy666 2024-12-20T11:23:10+08:002024-12-20T11:23:10+08:00 这不受支持,显然最好的解决方案是联系那些有不包括 PSReadLine 的绝妙想法的人并说服他们改变主意。 但如果你有编辑$PROFILE文件的权限,那么可以采取以下解决方法: Get-History当 shell 退出事件触发时,添加自动日志文件附加条目: Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action { (Get-History).CommandLine | Add-Content -Path "C:\Some\Path\To\log.txt" } 当然,当 PowerShell 不能正常退出时,这将不起作用。 编写您自己的读取行的处理程序,这绝非易事,它本质上是以无意义的方式重写 PSReadLine 的一部分。祝你好运。
简短的回答是,不是,不是原生的。
引用 PowerShell 的about_History帮助文档:
PSReadLine 历史记录PSReadLineHistory
(Get-PSReadlineOption).HistorySavePath
将检索当前 PowerShell 主机的历史文件路径。%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\
ConsoleHost_history.txt
Visual Studio Code Host_history.txt
这不受支持,显然最好的解决方案是联系那些有不包括 PSReadLine 的绝妙想法的人并说服他们改变主意。
但如果你有编辑
$PROFILE
文件的权限,那么可以采取以下解决方法:Get-History
当 shell 退出事件触发时,添加自动日志文件附加条目:当然,当 PowerShell 不能正常退出时,这将不起作用。