Using the PushOver app (https://pushover.net) I can easily send a message with powershell. It supports adding image attachments but this part I haven’t been able to figure out.
$uri = "https://api.pushover.net/1/messages.json"
$parameters = @{
token = "myapptoken"
user = "myusertoken"
message = "the message"
title = "the title"
}
Invoke-RestMethod -Uri $uri -Method Post -Body $parameters
That will cause the message to appear on my phone.
However if I look at their FAQs (Pushover: API)
It says I need to do the following:
[other HTTP headers] Content-Type: multipart/form-data; boundary=--abcdefg ----abcdefg Content-Disposition: form-data; name="user" [ your Pushover user key ] ----abcdefg Content-Disposition: form-data; name="token" [ your Pushover API token ] ----abcdefg Content-Disposition: form-data; name="message" your message here ----abcdefg Content-Disposition: form-data; name="attachment"; filename="your_image.jpg" Content-Type: image/jpeg [ raw binary data of image file here ] ----abcdefg--
I’ve tried various solution from bing’ing rest uploads, but none work. I always get 400 bad request.
Most recently I tried this with no luck:
$FilePath = 'c:\users\stephen\pictures\mypic.jpg';
$Uri = 'https://api.pushover.net/1/messages.json';
function AddData{
param(
[string]$Name,
[string]$Value
)
$stringHeader = [System.Net.Http.Headers.ContentDispositionHeaderValue]::new("form-data")
$stringHeader.Name = $Name
$StringContent = [System.Net.Http.StringContent]::new($Value)
$StringContent.Headers.ContentDisposition = $stringHeader
return $StringContent
}
$multipartContent = [System.Net.Http.MultipartFormDataContent]::new()
$multipartContent.Add((AddData -Name "token" -Value "token"))
$multipartContent.Add((AddData -Name "user" -Value "usertoken"))
$multipartContent.Add((AddData -Name "message" -Value "the message"))
$multipartContent.Add((AddData -Name "title" -Value "the title"))
$multipartFile = $FilePath
$FileStream = [System.IO.FileStream]::new($multipartFile, [System.IO.FileMode]::Open)
$fileHeader = [System.Net.Http.Headers.ContentDispositionHeaderValue]::new("form-data")
$fileHeader.Name = "attachment"
$fileHeader.FileName = 'Jay_Small.jpg'
$fileContent = [System.Net.Http.StreamContent]::new($FileStream)
$fileContent.Headers.ContentDisposition = $fileHeader
$fileContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::Parse("image/jpg")
$multipartContent.Add($fileContent)
$FileStream.Close()
Invoke-WebRequest -Uri $uri -Body $multipartContent -Method 'POST' #-ContentType "multipart/form-data;"