问题描述
似乎 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”文件夹。
因此,我建议您设置转到特定文件夹。此外,虽然文件可能很小,但随着时间的推移,它们会变得越来越多,因此,您需要对其进行管理。
它们当然可以直接在 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。
对于运行空间,这是一个运行 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 仍然是一个东西。 ;-}