Functions/GenXdev.Console/New-MicrosoftShellTab.ps1
################################################################################ <# .SYNOPSIS Creates a new Windows Terminal tab running PowerShell. .DESCRIPTION Opens a new Windows Terminal tab by simulating the keyboard shortcut Ctrl+Shift+T. The function brings the PowerShell window to the foreground, sends the keystroke combination, and optionally closes the current tab after a delay. .PARAMETER DontCloseThisTab When specified, prevents the current tab from being closed after creating the new tab. By default, the current tab will close after 3 seconds. .PARAMETER WhatIf Shows what would happen if the cmdlet runs. The cmdlet is not run. .PARAMETER Confirm Prompts you for confirmation before running the cmdlet. .EXAMPLE New-MicrosoftShellTab -DontCloseThisTab Creates a new terminal tab while keeping the current tab open. .EXAMPLE x Creates a new terminal tab and closes the current one after 3 seconds. #> function New-MicrosoftShellTab { [CmdletBinding(SupportsShouldProcess = $true)] [Alias("x")] param( ######################################################################## [Parameter( HelpMessage = "Keep current tab open after creating new tab", Mandatory = $false )] [switch] $DontCloseThisTab ######################################################################## ) begin { # activate the powershell window to enable keyboard input processing Write-Verbose "Bringing PowerShell window to foreground" $null = (Get-PowershellMainWindow).SetForeground() try { # initialize windows script automation object for keyboard simulation Write-Verbose "Creating WScript.Shell for sending keystrokes" $helper = New-Object -ComObject WScript.Shell # check if we should proceed with creating a new tab if ($PSCmdlet.ShouldProcess("Windows Terminal", "Create new tab")) { # simulate ctrl+shift+t keystroke to trigger new tab creation Write-Verbose "Sending Ctrl+Shift+T to create new tab" $null = $helper.sendKeys("^+t") # handle tab closure if not explicitly prevented if ($DontCloseThisTab -ne $true) { Write-Verbose "Waiting 3 seconds before closing current tab" Start-Sleep 3 if ($PSCmdlet.ShouldProcess("Current Windows Terminal tab", "Close tab")) { Write-Verbose "Exiting current tab" exit } } } } catch { # suppress any automation-related exceptions } } process { } end { } } ################################################################################ |