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 {
    }
}
################################################################################