PowerShell无法触发Windows通知及LoadXml报错问题求助
错误根因
- 错误代码
0xC00CE558属于XML格式无效错误,你代码里的逻辑错误是:你已经将$ToastTemplate变量通过here-string赋值为纯字符串格式的XML内容,调用LoadXml时却错误引用了只有XML对象才有的OuterXml属性,字符串不存在该属性,传入的实际是空值导致解析失败。 - 第一段代码运行无报错不弹通知,大概率是没有使用合法的应用标识符,或者系统版本不兼容旧版Toast模板。
修复方案
直接修改代码中LoadXml的入参,同时补充必要的运行时加载逻辑,修复后的可用代码如下:
function Test-ToastNotification { # 加载WinRT运行时依赖 Add-Type -AssemblyName System.Runtime.WindowsRuntime $null = [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] $null = [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom, ContentType = WindowsRuntime] # 使用PowerShell合法应用ID $appId = 'Windows PowerShell' # 自定义Toast内容XML $ToastXmlContent = @" <toast launch="app-defined-string"> <visual> <binding template="ToastGeneric"> <text>预防用眼疲劳</text> <text>休息20秒</text> </binding> </visual> </toast> "@ # 加载XML $ToastXml = New-Object -TypeName Windows.Data.Xml.Dom.XmlDocument $ToastXml.LoadXml($ToastXmlContent) # 发送通知 $notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($appId) $notification = New-Object -TypeName Windows.UI.Notifications.ToastNotification($ToastXml) $notifier.Show($notification) } # 调用测试 Test-ToastNotification
注意事项
- 仅支持Windows 10 1709及以上版本、Windows 11系统使用
- 需确保系统设置中「Windows PowerShell」的通知权限已开启,且专注助手处于关闭状态
- 若使用PowerShell 7+,将
$appId改为对应版本的应用标识符即可
内容的提问来源于stack exchange,提问作者user310291
相关产品推荐
相关产品推荐

