如何从RUN运行特定窗口大小的PowerShell?

如何从具有特定窗口大小的“RUN”启动PowerShell? 有没有像“-size:100×100”的任何争论。 这是可能的运行或有没有其他的方式来运行一个给定的大小的程序窗口?

在Windows Run对话框中:

以下命令在默认大小的控制台窗口中启动PowerShell, 然后将窗口大小调整为100列x 50行:

 powershell -noexit -command "[console]::WindowWidth=100; [console]::WindowHeight=50; [console]::BufferWidth=[console]::WindowWidth" 

注意: powershell -noexit -command "mode con cols=100 lines=50"在原理上是有效的,但有不幸的副作用,就是你失去了任何回滚缓冲区 (缓冲区高度设置为窗口高度)。

该命令使用[console]System.Console ).net类型来设置窗口的宽度和高度,另外将缓冲区宽度设置为与窗口宽度相同的值,以确保不出现水平滚动条。

从现有的控制台窗口中:

如果从现有的命令提示符或PowerShell控制台运行上述命令,则新的PowerShell会话将在当前窗口中启动,并因此调整当前窗口的大小。
以下是如何打开一个窗口

  • 从命令提示符( cmd.exe ):使用start

     start powershell -noexit -command "[console]::windowwidth=100; [console]::windowheight=50; [console]::bufferwidth=[console]::windowwidth" 
  • 从PowerShell控制台窗口中:使用Start-Process (注意参数列表中的单引号):

     start-process powershell '-noexit -command "[console]::windowwidth=100; [console]::windowheight=50; [console]::bufferwidth=[console]::windowwidth"' 

如果您不想在窗口以默认尺寸打开调整窗口大小,请执行以下操作:

上述命令在用默认大小创建新窗口运行,这可能会造成视觉上的破坏。

为了防止这种情况,你有两个选择:

  • 创建一个目标powershell.exe 的快捷方式文件 ,配置其属性以设置所需的大小,然后运行快捷方式文件*.lnk )打开窗口。

  • 根据自己的喜好更改默认窗口大小 ,但请注意,这适用于以可执行文件名(或路径)开头的所有 PowerShell会话:

    • 交互方式:

      • Win + R ,只提交powershell

      • 打开新窗口的系统菜单,选择Properties并根据需要配置窗口大小。
        未来的Windows以相同的方式启动将具有相同的大小。

    • 编程方式:

      • 控制台窗口属性存储在HKEY_CURRENT_USER\Console的注册表中,其中包含窗口大小的REG_DWORDWindowSize和包含缓冲区大小的ScreenBufferSize

      • 密钥HKEY_CURRENT_USER\ConsoleHKCU:\Console )包含整体默认值。

      • 子项(如%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe )包含特定可执行文件/窗口标题的重写。

      • 子键从父项继承值,这使子键的设置值复杂化 – 请参阅下面的示例。


以编程方式设置powershell.exe窗口大小默认值:

以下PSv5 +代码段将powershell.exe启动的控制台窗口的默认窗口大小设置为100列50行。

请注意,屏幕缓冲区值从整体默认设置继承的事实,直接存储在HKCU:\Console ,增加了复杂性。

 # Determine the target registry key path. $keyPath = 'HKCU:\Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe' # Get the existing key or create it on demand. $key = Get-Item $keyPath -ErrorAction SilentlyContinue if (-not $key) { $key = New-Item $keyPath } # Determine the new size values. [uint32] $cols = 100; [uint32] $lines = 50 # Convert to a DWORD for writing to the registry. [uint32] $dwordWinSize = ($cols + ($lines -shl 16)) # Note: Screen *buffer* values are inherited from # HKCU:\Console, and if the inherited buffer width is larger # than the window width, the window width is apparently set to # the larger size. # Therefore, we must also set the ScreenBufferSize value, passing through # its inherited height value while setting its width value to the same # value as the window width. [uint32] $dwordScreenBuf = Get-ItemPropertyValue HKCU:\Console ScreenBufferSize -EA SilentlyContinue if (-not $dwordScreenBuf) { # No buffer size to inherit. # 3000 lines by default. # Note that if we didn't set this explicitly, the buffer height would # default to the same value as the window height. $dwordScreenBuf = 3000 -shl 16 } $dwordScreenBuf = $cols + ($dwordScreenBuf -shr 16) -shl 16 # Write the new values to the registry. Set-ItemProperty -Type DWord $key.PSPath WindowSize $dwordWinSize Set-ItemProperty -Type DWord $key.PSPath ScreenBufferSize $dwordScreenBuf