Public/Send-Wormhole.ps1

function Send-Wormhole {
    [CmdletBinding(DefaultParameterSetName = 'Text')]
    param(
        [Parameter(Mandatory = $true, ParameterSetName = 'Text')]
        [string] $Text,

        [Parameter(Mandatory = $true, ParameterSetName = 'File')]
        [ValidateScript({ Test-Path -Path $_ -PathType Leaf })]
        [string] $FilePath,

        [Parameter()]
        [string] $Code,

        [Parameter()]
        [string] $RelayUrl = $script:PowerWormholeDefaults.RelayUrl,

        [Parameter()]
        [string] $AppId = $script:PowerWormholeDefaults.AppId,

        [Parameter()]
        [ValidateRange(1, 3600)]
        [int] $TimeoutSeconds = 300,

        [Parameter()]
        [switch] $NoStatus
    )

    $session = $null
    try {
        Write-WormholeDebug -Component 'cmd-send' -Message 'Send-Wormhole invoked.' -Data @{ parameterSet = $PSCmdlet.ParameterSetName; hasCode = (-not [string]::IsNullOrWhiteSpace($Code)); timeoutSeconds = $TimeoutSeconds; noStatus = [bool]$NoStatus }

        if ([string]::IsNullOrWhiteSpace($Code)) {
            $session = Open-Wormhole -AllocateCode -RelayUrl $RelayUrl -AppId $AppId
            Write-Host "Wormhole code is: $($session.Code)"
            if (-not $NoStatus) {
                Write-Host 'Share this code with the receiver.'
            }
        }
        else {
            $session = Open-Wormhole -Code $Code -RelayUrl $RelayUrl -AppId $AppId
        }

        $statusCallback = $null
        if (-not $NoStatus) {
            $statusCallback = {
                param($Message)
                Write-Host "[send] $Message"
            }
        }

        if ($PSCmdlet.ParameterSetName -eq 'Text') {
            Invoke-WormholeTextSendProtocol -Session $session -Text $Text -TimeoutSeconds $TimeoutSeconds -StatusCallback $statusCallback
            return [pscustomobject]@{
                Type = 'text'
                Code = $session.Code
                Text = $Text
                TextLength = $Text.Length
                FilePath = $null
                FileName = $null
                FileSize = $null
            }
        }

        $fileItem = Get-Item -LiteralPath $FilePath
        Invoke-WormholeFileSendProtocol -Session $session -Path $FilePath -TimeoutSeconds $TimeoutSeconds -StatusCallback $statusCallback
        [pscustomobject]@{
            Type = 'file'
            Code = $session.Code
            Text = $null
            TextLength = $null
            FilePath = $fileItem.FullName
            FileName = $fileItem.Name
            FileSize = $fileItem.Length
        }
    }
    finally {
        if ($null -ne $session) {
            Close-WormholeMailbox -Session $session -Mood 'happy'
        }
    }
}