Public/Set-ConsoleWindow.ps1

function Set-ConsoleWindow {
  param(
    [Parameter(ParameterSetName='Hide')]
    [switch]$Hide,
    [Parameter(ParameterSetName='ShowNormal')]
    [switch]$ShowNormal,
    [Parameter(ParameterSetName='ShowMinimized')]
    [switch]$ShowMinimized,
    [Parameter(ParameterSetName='ShowMaximized')]
    [switch]$ShowMaximized,
    [Parameter(ParameterSetName='Maximize')]
    [switch]$Maximize,
    [Parameter(ParameterSetName='ShowNormalNoActivate')]
    [switch]$ShowNormalNoActivate,
    [Parameter(ParameterSetName='Show')]
    [switch]$Show,
    [Parameter(ParameterSetName='Minimize')]
    [switch]$Minimize,
    [Parameter(ParameterSetName='ShowMinNoActivate')]
    [switch]$ShowMinNoActivate,
    [Parameter(ParameterSetName='ShowNoActivate')]
    [switch]$ShowNoActivate,
    [Parameter(ParameterSetName='Restore')]
    [switch]$Restore,
    [Parameter(ParameterSetName='ShowDefault')]
    [switch]$ShowDefault,
    [Parameter(ParameterSetName='ForceMinimized')]
    [switch]$ForceMinimized
  )
  Begin {
    if (-not ('Console.Window' -as [type])) {
      # .Net methods for hiding/showing the console in the background
      Add-Type -Name Window -Namespace Console -MemberDefinition @'
        [DllImport("Kernel32.dll")]
        public static extern IntPtr GetConsoleWindow();
 
        [DllImport("user32.dll")]
        public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
'@

    }
  }
  Process {
    $sval = switch($PsCmdlet.ParameterSetName) {
      'Hide' {'0'}
      'ShowNormal' {'1'}
      'ShowMinimized' {'2'}
      'ShowMaximized' {'3'}
      'Maximize' {'3'}
      'ShowNormalNoActivate' {'4'}
      'Show' {'5'}
      'Minimize' {'6'}
      'ShowMinNoActivate' {'7'}
      'ShowNoActivate' {'8'}
      'Restore' {'9'}
      'ShowDefault' {'10'}
      'ForceMinimized' {'11'}
      'Default' {throw 'Error has occured while assigning numerial values'}
    }
    $null = [Console.Window]::ShowWindow([Console.Window]::GetConsoleWindow(), $sval)
  }
}