How can I determine from a PowerShell script in runtime in which host it is running?

Tag: powershell Author: jjcc1125 Date: 2009-07-20

I try to figure out whether my script is running in PowerShell.exe or in the ISE. If I am running in PowerShell.exe then I would like to change the size of the console window, but I don't want to impact the ISE, if I don't.

Best Answer

You can look at the $Host variable. The name will be "ConsoleHost" in the console and "Windows Powershell ISE Host" in the ISE. Although this can probably be a little flaky to test because you're relying on user-readable strings.

Another way might be to look at $Host.UI.RawUI.BufferSize.Height which seems to be always 0 in the ISE. Something which isn't very common with a console window.

Other Answer1

$shellid also, however a better option would be to use the separate profiles for each host: Microsoft.PowerShell_Profile.ps1 and Microsoft.PowerShellISE_Profile.ps1. The respective files will run for the specific hosts. To run something in all hosts use the generic, Profile.ps1

comments:

$ShellId yields "Microsoft.Powershell" in both the console and the ISE, at least here.
Hmm, I'm used to dealing with sqlps which is the SQL 2008 host. The shellid between those hosts is different The use of separate profiles is still a possible solution.