Rob*_*bin 5

首先,将以下功能与-Message一起使用,以为PowerShell生成滑出敬酒通知。

function New-ToastMessage
{
<#
        .SYNOPSIS
        Displays a toast notification with a message and optional image.
        .DESCRIPTION
        Displays a toast notification with a message and optional image.
        .PARAMETER message
        The text message you want to display in your toast.
        .PARAMETER ActionCentre
        Send this to the action centre.
        .PARAMETER image
        An image that you wish to display alongside the message.
        .EXAMPLE
        New-ToastMessage -message "Alert: Disk Space Low (5%)" -image 'C:\Users\Robin\Documents\disk-low.png'
        .EXAMPLE
         New-ToastMessage -message "Alert: Disk Space Low (5%)" -image "C:\Users\Robin\Documents\disk-low.png" -ActionCenter
        .NOTES
        Author: Robin Malik
#>

param(
    [Parameter(Mandatory = $true,HelpMessage = 'Toast Message?')]
    [String]
    $Message,

    [Parameter(HelpMessage = 'Send to action centre')]
    [Switch]
    $ActionCentre,

    [Parameter(Mandatory = $false,HelpMessage = 'Path to image?')]
    [String]
    $Image
)

$ErrorActionPreference = 'Stop'

$notificationTitle = [DateTime]::Now.ToShortTimeString() + ': ' + $Message

[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null

if($Image)
{
    $templateType = 'ToastImageAndText01'
}
else
{
    $templateType = 'ToastText01'
}

$template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::$templateType)

#Convert to .NET type for XML manipuration
$toastXml = [xml]$template.GetXml()

if($Image)
{
    $toastXml.GetElementsByTagName('image').SetAttribute('src',$Image) > $null
    $toastXml.GetElementsByTagName('image').SetAttribute('alt','overlay text') > $null
}
$toastXml.GetElementsByTagName('text').AppendChild($toastXml.CreateTextNode($notificationTitle)) > $null

#Convert back to WinRT type
$xml = New-Object -TypeName Windows.Data.Xml.Dom.XmlDocument
$xml.LoadXml($toastXml.OuterXml)

$toast = [Windows.UI.Notifications.ToastNotification]::new($xml)
$toast.Tag = 'PowerShell'
$toast.Group = 'PowerShell'
$toast.ExpirationTime = [DateTimeOffset]::Now.AddMinutes(5)
if($actioncentre)
{
    $toast.SuppressPopup = $true
}
$notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('PowerShell')
$notifier.Show($toast)
}
Run Code Online (Sandbox Code Playgroud)

然后,您将能够在Windows 10设置>系统>通知和操作>从这些发件人获取通知下看到PowerShell。

单击PowerShell并启用“在操作中心显示通知”,如下所示:

Windows 10的PowerShell通知区域

最后,您可以使用-ActionCentre开关调用上述函数,然后将其发送到那里。


Mik*_*nen 3

这是你可以使用的东西吗?https://technet.microsoft.com/en-us/library/ff730952.aspx

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

$objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon 

$objNotifyIcon.Icon = "C:\Scripts\Forms\Folder.ico"
$objNotifyIcon.BalloonTipIcon = "Error" 
$objNotifyIcon.BalloonTipText = "A file needed to complete the operation could not be found." 
$objNotifyIcon.BalloonTipTitle = "File Not Found"

$objNotifyIcon.Visible = $True 
$objNotifyIcon.ShowBalloonTip(10000)
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,ShowBalloonTip 的通知会在指定时间(我认为限制为 30 秒)后从屏幕和操作中心消失。除了每 30 秒再次调用 ShowBalloonTip 之外(如果显式关闭通知可能会惹恼用户),是否有办法让它保持不变? (2认同)