$host isn’t just for EnterNestedPrompt(). $host.UI.RawUI has some intresting data. For example, Nicely Wrapping a Line of Text to STDOUT uses $host.UI.RawUI.WindowSize.Width to determine where to break the line based on window width. However,
$host.UI.RauUI.WindowSize.Width = 80;
doesn’t seem to work. The reason is because ‘WindowSize’ is a System.Management.Automation.Host.Size object, and Width is that object’s Width property. Therefore, to change the window’s size, a new System.Management.Automation.Host.Size object must be created. New … object. Hm.
$host.UI.RawUI.WindowSize = New-Object System.Management.Automation.Host.Size(80, 25);
As for the scrollbar, that’s the $host.UI.RawUI.BufferSize property, which is another Host.Size object.
$host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.Size(80, 9999);
The one gotcha is, when growing the window’s width, set the BufferSize first, then the WindowSize. When shrinking the width, set the WindowSize first, then the BufferSize. As a mnemoic, BufferSize -ge WindowSize must be true.