com.start-automating.windowsscriptdeck.sdPlugin/CopyScript.@.ps1

# This file handles all InvokeScript related events

$invokeError = $null

# WillAppear and WillDisappear are both settings that will run a script.
foreach ($settingName in 'WillAppear', 'WillDisappear') {
    if ($event.SourceIdentifier -match $settingName -and
    $event.MessageData.payload.settings.$settingName) {
        $settingScript = $event.MessageData.payload.settings.$settingName
        Invoke-Expression $settingScript -ErrorAction Continue -ErrorVariable $invokeError
        if ($invokeError) {
            $invokeError | Out-string | Add-Content -Path $global:STREAMDECK_PLUGINLOGPATH
            Send-StreamDeck -ShowAlert -Context $event.MessageData.Context
        } else {
            Send-StreamDeck -ShowOK -Context $event.MessageData.Context
        }
    }
}

# Keydown will run differently:
if ($event.SourceIdentifier -match 'KeyDown') {
    # It will compose a message containing
    $msg = @(
    if ($event.MessageData.payload.settings.header) {
        # the header,
        $event.MessageData.payload.settings.header
        
    }
    if ($event.MessageData.payload.settings.script) {
        # the output of the script (as a string)
        $bufferWidth = 1kb
        (Invoke-Expression -Command $event.MessageData.payload.settings.script 2>&1 | 
            Out-String -Width $bufferWidth).Trim()        
    }

    if ($event.MessageData.payload.settings.footer) {
        # and the footer
        $event.MessageData.payload.settings.footer
    }
    ) -join [Environment]::NewLine # (joined by newlines).

    # We pass this to the Set-Clipboard command.
    Set-Clipboard $msg
}