PowerShell ISE 中的命令历史记录存储在哪里?

问题描述

似乎 PowerShell 的命令历史记录与 PowerShell ISE 分开存储。 但我有一个问题,PowerShell ISE 的命令历史记录存储在何处以及如何查看它们?

解决方法

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

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 来捕获您所做的一切,但同样,它不是对要执行的先前命令的开箱即用/控制台/ISE 立即查找像 PSReadLine。然而,你可以做到这一点,有点创造力。然而,这只是一团糟。

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

enter image description here

因此,我建议您设置转到特定文件夹。此外,虽然文件可能很小,但随着时间的推移,它们会变得越来越多,因此,您需要对其进行管理。

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

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

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

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

Legacy PowerShell ISE 3 pane editor

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

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

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

在 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 仍然是一个东西。 ;-}