【问题标题】:Wheres the command history in PowerShell ISE stored at?PowerShell ISE 中的命令历史记录存储在哪里?
【发布时间】:2021-08-07 21:01:23
【问题描述】:

PowerShell 的命令历史似乎与 PowerShell ISE 分开存储。 但我有一个问题是,PowerShell ISE 的命令历史存储在哪里,如何查看它们?

【问题讨论】:

  • PowerShell ISE 没有命令历史记录,所以答案是“无处” :-)
  • 您可以在会话中使用Get-History 查看命令历史记录。我相信它只是为那个会话存储在内存中,所以当它消失时,它就消失了。大声笑,你可以在你的 ise 属性中增加缓冲区大小,或者使用$MaximumHistoryCount = 1000
  • 我已更正,您可以使用:(Get-PSReadlineOption).HistorySavePath 找到它。它保存在您的 appdata 文件夹下。所以使用Cat (Get-PSReadlineOption).HistorySavePath 来运行所有历史命令。
  • @AbrahamZinala 你测试过这个吗? Am 99% PSReadLine 支持在 ISE 中保存的历史记录
  • 嗯,只有 Get-History 有效,但 PSReadline 无效。很好,正在普通的豪华控制台上尝试。

标签: windows powershell history


【解决方案1】:

至于历史文件的位置;它们位于此处:

Get-ChildItem -Path "$env:USERPROFILE\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine" | 
Format-Table -AutoSize
# Results
<#
    Directory: C:\Users\YourUserName\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine


Mode          LastWriteTime Length Name                                   
----          ------------- ------ ----                                   
-a----  17-May-21     02:23 258925 ConsoleHost_history.txt                
-a----  11-May-21     01:20 120222 Visual Studio Code Host_history.txt    
-a----  27-Jun-20     18:58      0 Windows PowerShell ISE Host_history.txt
#>

如前所述,在 ISE 中,您可以利用 Start-Transcript cmdlet 来捕获您所做的一切,但同样,它不是像 PSReadLine 那样对之前执行的命令进行开箱即用/控制台/ISE 立即查找.然而,你可以通过一些创造力来做到这一点。然而,这只是一个杂牌。

关于使用Start-Transcript 的说明。它将默认为您的“$env:USERPROFILE\Documents”文件夹。

所以,我建议您设置为转到特定文件夹。此外,虽然文件可能很小,但随着时间的推移会有大量文件,因此,您需要对其进行管理。

它们当然可以直接在 ISE 中打开:

psEdit -filenames ((Get-ChildItem -Path "$env:USERPROFILE\Documents" | Sort-Object -Property LastWriteTime -Descending)[0]).FullName

然而,由于您已经在 ISE 中,您可以从编辑器窗格中键入并运行所有命令,并根据需要选择任何人并再次运行它。

但是,如果您只是使用 ISE 控制台,并认为它与 PowerShell 控制台主机相同,那就错了。它确实是一个带有一些控制台技能的输出窗口。早在 ISE 早期,就有 3 个窗格。编辑器、输出窗口和真正的控制台。

真正的控制台在更高的 ISE 版本中被移除。为什么,谁知道? VSCode 几乎让我们回到了那里。

如果您想执行控制台操作,请使用 PowerShell 控制台,或使用运行空间将 shell 连接到 PowerShell 控制台以留在 ISE 中。

对于运行空间,这是一个在 ISE 中运行 PowerShell Core (v6+) 的示例。

在 Windows PowerShell ISE 中使用 PowerShell 7

https://old.ironmansoftware.com/using-powershell-core-6-and-7-in-the-windows-powershell-ise

$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Clear()
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Switch to PowerShell 7", { 
        function New-OutOfProcRunspace {
            param($ProcessId)

            $ci = New-Object -TypeName System.Management.Automation.Runspaces.NamedPipeConnectionInfo -ArgumentList @($ProcessId)
            $tt = [System.Management.Automation.Runspaces.TypeTable]::LoadDefaultTypeFiles()

            $Runspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace($ci, $Host, $tt)

            $Runspace.Open()
            $Runspace
        }

        $PowerShell = Start-Process PWSH -ArgumentList @("-NoExit") -PassThru -WindowStyle Hidden
        $Runspace = New-OutOfProcRunspace -ProcessId $PowerShell.Id
        $Host.PushRunspace($Runspace)
}, "ALT+F5") | Out-Null

$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Switch to Windows PowerShell", { 
    $Host.PopRunspace()

    $Child = Get-CimInstance -ClassName win32_process | where {$_.ParentProcessId -eq $Pid}
    $Child | ForEach-Object { Stop-Process -Id $_.ProcessId }

}, "ALT+F6") | Out-Null

因此,通过一些调整,您可以对 Windows PowerShell 5 执行相同操作以获取原始控制台

但是,如果允许的话,请避免所有的麻烦,并使用 VSCode。然而,在您的服务器上,我们都知道 ISE 仍然存在。 ;-}

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2016-01-22
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    相关资源
    最近更新 更多