Public/Imported/Show-Notification.ps1
function Show-Notification { [cmdletbinding()] Param ( [string] $ToastTitle, [string] [parameter(ValueFromPipeline)] $ToastText, [datetime] [parameter(ValueFromPipeline, Mandatory = $false)] $Schedule, [string] [parameter(ValueFromPipeline, Mandatory = $false)] $IconUri, [string] [parameter(ValueFromPipeline, Mandatory = $false)] $Group = "Powershell", [string] [parameter(ValueFromPipeline, Mandatory = $false)] $Tag = "Powershell" ) try { $TempImagePath = "" # Se for uma URL remota, baixa a imagem localmente if ($IconUri -match "^https?:\/\/") { $TempImagePath = "$env:TEMP\toast_image.png" try { Invoke-WebRequest -Uri $IconUri -OutFile $TempImagePath -ErrorAction Stop $IconUri = "file:///$($TempImagePath -replace '\\', '/')" Write-Host "✔️ Imagem remota baixada para: $TempImagePath" } catch { Write-Host "⚠️ Erro ao baixar a imagem remota: $_.Message" $IconUri = "" } } # Definição da imagem padrão local if (-not $IconUri) { $LocalImagePath = "$PSScriptRoot\psyduck.webp".Replace("\Public\Imported\", "\assets\") if (Test-Path $LocalImagePath) { $IconUri = "file:///$($LocalImagePath -replace '\\', '/')" } else { Write-Host "⚠️ Arquivo de imagem local não encontrado: $LocalImagePath" } } # Validação da URI da imagem if ($IconUri -and $IconUri -notmatch "^(https?:\/\/|file:\/\/\/)") { throw "O caminho da imagem '$IconUri' não é válido. Use um URL HTTPS ou um caminho local válido." } # Criando XML da notificação $ToastXml = @" <toast activationType="protocol"> <visual> <binding template='ToastGeneric'> <text>$ToastTitle</text> <text>$ToastText</text> <image placement='appLogoOverride' src='$IconUri' alt='Notification Icon'/> </binding> </visual> </toast> "@ # Criar documento XML $XmlDoc = New-Object Windows.Data.Xml.Dom.XmlDocument $XmlDoc.LoadXml($ToastXml) # Criar a notificação if ($Schedule) { $Toast = [Windows.UI.Notifications.ScheduledToastNotification]::new($XmlDoc, $Schedule) $Toast.Id = 'scheduled_toast' } else { $Toast = [Windows.UI.Notifications.ToastNotification]::new($XmlDoc) } $Toast.Tag = $Tag $Toast.Group = $Group $Toast.ExpirationTime = [DateTimeOffset]::Now.AddMinutes(1) # Criar e exibir a notificação $Notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($Group) if ($Schedule) { $Notifier.addToSchedule($Toast) } else { $Notifier.Show($Toast) } Write-Host "✅ Notificação enviada com sucesso!" } catch { Write-Host "❌ Erro ao enviar a notificação: $_" } } |