Public/Send-PushoverMessage.ps1
Function Send-PushoverMessage { <# .SYNOPSIS Actually sends message off to Pushover Devices .DESCRIPTION Uses the Pushover API to send messages via powershell. Requires Save-PushoverAPIInformation first. Devices are auto populated from the list of registered devices with Pushover. Also saves the messages to $PreviousPushoverMessages global variable for status information. .EXAMPLE Send-PushoverMessage 'This is a test' 'Test 1' #> [cmdletbinding()] param( [string]$token = "$(Import-PushoverConfig | Select-Object -ExpandProperty AppToken)", [string]$user = "$(Import-PushoverConfig | Select-Object -ExpandProperty UserKey)", [Parameter(Mandatory=$true, Position=1 )] [string]$message = '', [Parameter(Position=2 )] [string]$title, [string]$url = '', [string]$url_title = '', <#[ValidateSet('pushover','bike','bugle','cashregister','classical','cosmic','falling','gamelan','incoming','intermission','magic','mechanical','pianobar','siren','spacealarm','tugboat','alien','climb','persistent','echo','updown','none')] [string]$sound,#> <#[DateTime]$timestamp,#> [ValidateSet('-2','-1','0','1')] [int]$priority = 0, [switch]$PassThru = $false ) DynamicParam { $ParameterName = 'device' $RuntimeDefinedParameterDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary $AttributeCollection = New-Object System.Collections.ObjectModel.Collection[System.Attribute] $ParameterAttribute = New-Object System.Management.Automation.ParameterAttribute $AttributeCollection.Add($ParameterAttribute) $devices = Get-PushoverUserDevice $ValidateSetAttribute = New-Object System.Management.Automation.ValidateSetAttribute($devices) $AttributeCollection.Add($ValidateSetAttribute) $RuntimeParameter = New-Object System.Management.Automation.RuntimeDefinedParameter($ParameterName, [string], $AttributeCollection) $RuntimeDefinedParameterDictionary.Add($ParameterName, $RuntimeParameter) return $RuntimeDefinedParameterDictionary } BEGIN {} PROCESS {} END { $params = @{} foreach($h in $MyInvocation.MyCommand.Parameters.GetEnumerator()) { $key = $h.Key if ($key -match 'Debug|Verbose|OutVariable|WarningVariable|OutBuffer|ErrorVariable|PipelineVariable|ErrorAction|WarningAction') { break; } $val = Get-Variable -Name $key | Select-Object -ExpandProperty Value #Skip Automatic Variables if (([String]::IsNullOrEmpty($val) -and (!$PSBoundParameters.ContainsKey($key)))) { break; } if ($key -eq 'timestamp') { $val = (Get-Date $val.ToUniversalTime() -UFormat %s) -Replace('[,\.]\d*', '') } $params[$key] = $val } $Result = $params | Invoke-RestMethod -Uri "$APIURI/messages.json" -Method Post $Result | Add-Member -MemberType NoteProperty -Name datetime -Value (Get-Date) $Result | Add-Member -MemberType NoteProperty -Name title -Value $params.Title if ($Result.Status -ne 1) { $Result | Add-Member -MemberType NoteProperty -Name success -value $false } elseif ( $Result.Status -eq 1) { $Result | Add-Member -MemberType NoteProperty -Name success -value $true } $Result.pstypenames.insert(0,'PSPushover.Response') if ($PassThru.IsPresent) { Write-Output $Result } #$Global:PreviousPushMessages += $Results } } |