Public/New-DotNetToast.ps1
Function New-DotNetToast { <# .SYNOPSIS Создает новое всплывающее уведомление (Toast). .DESCRIPTION Функция использует Windows.UI.Notifications.ToastNotification для отображения всплывающих сообщений. .PARAMETER Title Заголовок всплывающего окна. .PARAMETER Message Текс сообщения, которое будет отображатся в виде Toast. .PARAMETER Logo Путь к файлу с иконкой для отображения. .EXAMPLE PS C:\> $Title = 'Ошибка при настройке системы' PS C:\> $Message = 'Вам необходимо обратится в IT-отдел, т.к. в этот сеансе что-то пошло не так...' PS C:\> $Logo = 'C:\Tools\_aux\pic\message_error_icon64.png' PS C:\> New-DotNetToast -Title $Title -Message $Message -Logo $Logo .NOTES Задача данной функции - создать информационное сообщение. Обработка щелчка мыши или добавление кнопок не предусмотрены. Если есть задача создавать более функциональные уведомления - используйте модуль BurntToast #> [cmdletBinding()] Param( [Parameter(Mandatory = $true, ValueFromPipeline = $false, Position = 0)] [System.String] $Title, [Parameter(Mandatory = $true, ValueFromPipeline = $false, Position = 1)] [System.String] $Message, [Parameter(Mandatory = $false, ValueFromPipeline = $false, Position = 2)] [System.String] $Logo ) try { if ($IsLinux) { throw [System.Configuration.ConfigurationException]::New('This operation system does not supported.') } # Определяем тип ОС, так как не везде можно показать Toast notification $OSInstallationType = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").InstallationType switch ($OSInstallationType) { # Это пригодится, если мы на Core-версии сервера. 'Server Core' { Add-Type -AssemblyName PresentationFramework [System.Windows.MessageBox]::Show($Message, $Title) break } # Все остальное, кроме Core-сервера Default { $XmlString = @" <toast> <visual> <binding template="ToastGeneric"> <text>$Title</text> <text>$Message</text> <image src="$Logo" placement="appLogoOverride" hint-crop="square" /> </binding> </visual> <audio src="ms-winsoundevent:Notification.Default" /> </toast> "@ $AppId = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe' #Add-Type -Path 'C:\Program Files\WindowsPowerShell\Modules\BurntToast\0.6.2\lib\Microsoft.Toolkit.Uwp.Notifications\Microsoft.Toolkit.Uwp.Notifications.dll' $null = [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] $null = [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] $ToastXml = [Windows.Data.Xml.Dom.XmlDocument]::new() $ToastXml.LoadXml($XmlString) $Toast = [Windows.UI.Notifications.ToastNotification]::new($ToastXml) [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppId).Show($Toast) } } } catch { Write-Error -Exception $PSItem.Exception } } |