如何将单个命令注入powershell历史记录?

eblbsuwk  于 2023-10-18  发布在  Shell
关注(0)|答案(2)|浏览(155)

如果我在powershell中定义了以下字符串(或有效命令的任何其他值)

$foo = "Get-ChildItem -filter *.cmake"

我怎样才能将这个字符串(不执行命令)注入到powershell历史记录中,这样下次用户按下向上箭头时,这个命令就可用了。

htrmnn0y

htrmnn0y1#

UPDATE--修复了之前示例中的设置无法正常工作的问题

有两个历史记录需要更新,用于两个不同的目的。

上/下箭头PowerShell历史记录

更新控制台主机历史记录将更改为任何新创建的Window PowerShell显示的向上/向下箭头历史记录

Add-Content -path (Get-PSReadlineOption).HistorySavePath "Get-ChildItem -filter *.cmake"

PowerShell历史记录

通过Add-History更新将修改通过Get-History显示历史的历史文件
您可以使用以下命令添加到每个文档的历史记录中

Add-History
   [[-InputObject] <PSObject[]>]
   [-Passthru]
   [<CommonParameters>]

步骤:
1.使用插入历史所需的正确键创建条目对象
1.添加到要插入的对象数组
1.调用add history命令并在#2中提供对象数组
使用示例中提供的命令的实际示例命令

PS C:\> $foo = [pscustomobject]@{
 >>     CommandLine        = "Get-ChildItem -filter *.cmake"
 >>     ExecutionStatus    = "Completed"
 >>     StartExecutionTime =  "8/31/2020  2:44:16 AM"
 >>     EndExecutionTime   = "8/31/2020  2:44:16 AM"
 >> }
 PS C:\> $commands = @()
 PS C:\> $commands += $foo
 PS C:\>  Add-History -InputObject $commands  -PassThru

   Id CommandLine
   -- -----------
   133 Get-ChildItem -filter *.cmake

passthru仅用于显示插入的输出https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/add-history?view=powershell-7

6rqinv9w

6rqinv9w2#

虽然作为目前接受的答案的一部分列出的选项都部分工作,但问题中所述的目标从未实现(至少当我试图重现接受的解决方案时):
我怎样才能将该字符串(不执行命令)注入到PowerShell历史记录中,以便下次用户按下向上箭头时可以使用该命令
虽然通过Add-History的方法会附加到通过Get-History检索的历史记录中,但它不会影响通过向上箭头向后导航时建议的命令
手动追加到(Get-PSReadlineOption).HistorySavePath下的文件最终会影响向上箭头历史记录,但仅在触发实际加载之后(例如启动新的PS会话)
这种写入readline历史的集成方式对我来说确实有效:

[Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory("Write-Host 'I'm an artificially injected suggestion'")

相关问题