如何在powershell中测量窗口高度(行数)?

Hyu*_*ang 7 powershell powershell-ise windows-console

我的环境中的最大行数是 47。

我可以通过编程来测量这个值吗?

mkl*_*nt0 11

为了补充Christian.K 的有用答案

  • 获取主机对象的一种更简单且稍微更有效的方法是使用$Host 自动变量而不是Get-Hostcmdlet。

  • 保证能够访问PowerShell控制台主机中的窗口大小信息,即在控制台(终端)窗口中运行时

    • 是否公开此信息由给定主机自行决定,正如 Christian 所说,PowerShell ISE 不会公开- 尽管可以说它应该公开,因为它内置了一个控制台子系统。
  • 要测试您的代码是否在控制台(也称为终端中运行,请使用
    $Host.UI.SupportsVirtualTerminal-$True指示主机是控制台。


如果在PowerShell控制台主机中运行:

可以访问控制台的属性

  • via $Host.UI.RawUI(如 Christian 的回答),它是一个类型的对象[System.Management.Automation.Internal.Host.InternalHostRawUserInterface]-仅在 PowerShell 控制台主机中- 包装 .NET[Console]类(见下文)。

  • 通过.NET[Console];例如,要以这种方式获取窗口高度(行数),请使用:

    • [Console]::WindowHeight

示例$Host.UI.RawUI输出:

PS> $Host.UI.RawUI

ForegroundColor       : DarkYellow
BackgroundColor       : DarkMagenta
CursorPosition        : 0,58
WindowPosition        : 0,0
CursorSize            : 25
BufferSize            : 160,9999
WindowSize            : 160,75
MaxWindowSize         : 160,94
MaxPhysicalWindowSize : 303,94
KeyAvailable          : True
WindowTitle           : Windows PowerShell
Run Code Online (Sandbox Code Playgroud)

如果在PowerShell ISE中运行:

从 PowerShell版本 5.1开始编写

中的大多数属性$Host.UI.RawUI填充,并将返回其数据类型的默认值:

PS> $Host.UI.RawUI  # in the ISE

ForegroundColor       : -1
BackgroundColor       : -1
CursorPosition        : 0,0
WindowPosition        : 
CursorSize            : 
BufferSize            : 166,0
WindowSize            : 
MaxWindowSize         : 
MaxPhysicalWindowSize : 
KeyAvailable          : 
WindowTitle           : Windows PowerShell ISE
Run Code Online (Sandbox Code Playgroud)

唯一可用的与大小相关的信息是缓冲区宽度166上面的示例输出中)。

[Console]除了查询/设置用于与外部程序通信的字符编码之外,尝试在 ISE 中使用 .NET 类没有任何意义[[Console]::OutputEncoding 1 ]

  • 最初在会话中,尝试使用 的窗口相关成员会[Console]导致异常,因为 ISE 在启动时不会分配控制台窗口:

    # In a pristine session.
    PS> [Console]::WindowHeight
    The handle is invalid.     # EXCEPTION
    
    Run Code Online (Sandbox Code Playgroud)
  • 虽然 ISE按需分配隐藏控制台窗口,即您第一次在会话中运行控制台应用程序时,该隐藏控制台窗口的属性(随后通过 报告)[Console]并不反映ISE 所报告的模拟控制台的属性。呈现给用户。

    # chcp is a console application, so when it is run, 
    # the ISE allocates a (hidden) console window, 
    # after which the [Console] API becomes technically usable, 
    # but DOESN'T REPORT MEANINGFUL VALUES.
    PS> chcp >$null; [Console]::WindowHeight
    72  # No exception, but the value is meaningless.
    
    Run Code Online (Sandbox Code Playgroud)

[1] 请注意,ISE 默认为系统的旧版ANSI代码页,而常规控制台窗口默认为OEM代码页。因此,默认情况下,这两个环境对外部程序的输出进行不同的解码。