com.start-automating.windowsscriptdeck.sdPlugin/Start-Process.@.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
if (-not $event.MessageData.payload.settings) { return } $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') { $settingsSplat = @{} $command = $ExecutionContext.SessionState.InvokeCommand.GetCommand('Start-Process', 'Cmdlet') foreach ($prop in $event.MessageData.payload.settings.psobject.properties) { if ($prop.Name -match '(?<n>.+)Script$' -and $command.Parameters.($Matches.n) ) { $sb = try { [ScriptBlock]::Create($prop.Value) } catch { } if ($sb) { $settingsSplat[$command.Parameters[$Matches.n]] = & $sb } } elseif ($command.parameters[$prop.Name]) { $settingsSplat[$prop.Name] = $prop.Value } } foreach ($k in @($settingsSplat.Keys)) { if (-not $settingsSplat[$k]) { $settingsSplat.Remove($k) } } try { & $command @settingsSplat Send-StreamDeck -ShowOK -Context $event.MessageData.Context } catch { Send-StreamDeck -ShowAlert -Context $event.MessageData.Context $_ | Out-GridView } } |