PowerShellウインドーサイズをスクリプトで変更する

構文

$bufferSize = (Get-Host).UI.RawUI.BufferSize
$windowSize = (Get-Host).UI.RawUI.WindowSize
$bufferSize.Width = 70
$bufferSize.Height = 1000
$windowSize.Width = 70
$windowSize.Height = 50
(Get-Host).UI.RawUI.BufferSize = $bufferSize
(Get-Host).UI.RawUI.WindowSize = $windowSize

解説

 上記の一連のコマンドを実行すると、ウインドー、およびバッファーのサイズを変更できます。これらの操作をするに当たって、いくつか注意点があります。

 まずスクリプトで変更した内容は保存されません。毎回同じサイズで起動したい場合はPowerShell のウインドーサイズを変更する・横スクロールが発生しないようにするの方法を使用して下さい。

 バッファーのサイズ($bufferSize)は、画面に表示される文字数です。ウインドーのサイズ($windowSize)は名前通り、ウインドーのサイズです。バッファーのの幅や高さをウインドーよりも大きくすると、その分だけ縦や横のスクロールバーが表示されるようになります。逆に、ウインドーの幅や高さを、バッファーのサイズより大きくすることはできません。

 (Get-Host).UI.RawUI.BufferSizeや(Get-Host).UI.RawUI.WindowSizeは値型ですので、次の書き方で変更することはできません。

PS U:\PS> (Get-Host).UI.RawUI.BufferSize.Width = 100 #1
PS U:\PS> (Get-Host).UI.RawUI.BufferSize.Width
97
PS U:\PS>

 これは、次のように書いたものと等価になるためです。

PS U:\PS> $temporary=(Get-Host).UI.RawUI.BufferSize
PS U:\PS> $temporary = (Get-Host).UI.RawUI.BufferSize
PS U:\PS> $temporary.Width = 100
PS U:\PS> (Get-Host).UI.RawUI.BufferSize.Width
97
PS U:\PS>

 (Get-Host).UI.RawUI.BufferSizeという値を取得するときは、(Get-Host).UI.RawUI.BufferSizeのコピーが作られます。#1のように続けて書いた場合でも、BufferSizeのコピーの値が作られて、そのコピーを変更するだけです。

 (Get-Host).UI.RawUI.BufferSizeに直接代入するときは(Get-Host).UI.RawUI.BufferSizeの値が更新されます。そのため、次のように書けばバッファーのサイズが更新されます。もちろん、$newBufferSizeに有効な値が入っている場合に限ります。

(Get-Host).UI.RawUI.BufferSize = $newBufferSize

関連

inserted by FC2 system