Description
The Windows 11 Toast Notification Script enables you to create nice and nifty toast notifications for the logged on user in Windows 10/11. This can be done with Configuration Manager, Microsoft Intune and scheduled tasks.
The script comes with 3 main purposes/features, but is not limited to:
- UpgradeOS
- PendingReboot
- ADPasswordExpiration
UpgradeOS is meant to be used with Windows Servicing, notifying users about new available Windows versions. This is primarily intended to be used with ConfigMgr. The main idea here is to lure the end-users into a voluntary participation and make them initiate the in-place upgrade themselves. This works for both task sequences and feature updates.
The toast notification displayed for the end-user in such scenario, may look similar to below mid example, where the Install button will redirect the user into the Software Center:
PendingReboot is the second purpose/feature and is displayed above to the right. The idea here is to increase compliance and overall stability of the running computers by reminding users of pending reboots. Pending reboot here is checked in the registry and WMI.
PendingReboot is also capable of considering the uptime of the computer. When the uptime exceeds the value defined in the config.xml, the toast is displayed reminding users to restart more often.
ADPasswordExpiration is the third feature checking for local active directory password expiration. If the password is about to expire (days configured in config.xml), the toast notification will display reminding the users to change their password.
Configuration
The entire toast notification is configurable through the config-toast.xml. The idea here is, that the purpose of the toast notification can be modified without the need to push new files and/or update distribution points in ConfigMgr.
I have included several configuration samples in the download; one for use with Windows Servicing, one for checking for pending reboot, one for AD password expiration and another for upgrading Office.
Images
The images are changeable. Just replace ToastHeroImage.jpg and ToastLogoImage.jpg with your own. Some of the images I’m using throughout my posts is paid pictures and protected by copyright.
Logging
ConfigMgr admins loves log files! The script logs all its actions to AppData\Roaming\ToastNotificationScript\New-ToastNotification.log. This is useful when troubleshooting or if curious of what is done. Also, there are some combinations in the config-toast.xml which doesn’t makes sense and thus these are prevented. The log will tell when that happens.
Running the Script
How you run the script is mentioned in details in the documentation. In short, this is simply done using Powershell. Here’s a few examples:
- .\New-ToastNotification.ps1 -Config .\config-toast-osupgrade.xml
- .\New-ToastNotification.ps1 -Config .\config-toast-adpwexpiration.xml
- .\New-ToastNotification.ps1 -Config “\\Server\Share\config-toast-rebootpending.xml”
- .\New-ToastNotification.ps1 -Config “https://krpublicfiles.blob.core.windows.net/toastnotification/config-toast-whfb.xml”
- .\New-ToastNotification.ps1 (running it without parameter will default into -Config .\config-toast-xml)
Documentation
I have included a first draft of the documentation in the download.
Version history
- 1.0 – Script created
- 1.1 – Separated checks for pending reboot in registry/WMI from OS uptime
- 1.1 – More checks for conflicting options in config.xml
- 1.1 – The content of the config.xml is now imported with UTF-8 encoding enabling danish, german etc. characters to be used in the text boxes
- 1.2 – Added option for personal greeting using given name retreived from Active Directory. If no AD available, the script will use a placeholder
- 1.2 – Added ToastReboot protocol example, enabling the toast to carry out a potential reboot
- 1.3 – All text elements in the toast notification is now customizeable through the config.xml
- Expanded the options for finding given name. Now also looking in WMI if no local AD is available
- Added Get-WindowsVersion function: Testing for supported Windows version
- Added Test-WindowsPushNotificationsEnabled function: Testing for OS toast blockers
- Added contributions from @SuneThomsenDK @ https://www.osdsune.com
- Date formatting in deadline group
- Fixed a few script errors
- More text options
- 1.4 – Added new feature for checking for local active directory password expiration
- If the password is about to expire (days configured in config.xml), the toast notification will display reminding the users to change their password.
- Using this feature requires the ActiveDirectory powershell module
- The function will try to import the AD powershell module, look up the user’s SamAccountName and use that with the Get-ADUser cmdlet
- If the password is about to expire (days configured in config.xml), the toast notification will display reminding the users to change their password.
- 1.4.1 – Get-ADPasswordExpiration function modified to not requiring the AD Powershell module. Thank you @ Andrew Wells
- Improved logging for when no toast notifications are displayed
- 1.4.2 – Bug fixes to the date formatting of ADPasswordExpiration now correctly supporting different cultures
- 1.4.3 – Some minor corrections to the Get-GivenName function when retreiving first name from WMI and registry
- Moved the default location for New-ToastNotification.log file to the user’s profile (to cater for permissions issues in %programdata%)
- Added contribution from @kevmjohnston @ https://ccmcache.wordpress.com
- Added function for retrieving deadline date and time dynamically in WMI with ConfigMgr
- 1.4.4 – Fixed DynamicDeadline option and conversion to UniversalTime to display the deadline time correctly regardless of timezone
- 1.5 – Added new option to run task sequences (PackageID) directly from the toast notification action button. Enable the option <RunPackageID> in the config.xml
- Fixed a few script errors when running the script on a device without ConfigMgr client
- 1.6 – Added new option to run applications (ApplicationID) directly from the toast notification action button. Enable the option <RunApplicationID> in the config.xml
- Created Display-ToastNotification function
- Displaying the toast notification as been trimmed and merged into its own function
- Created Test-NTSystem function
- Testing if the script is being run as SYSTEM. This is not supported and will prevent the toast notification from being displayed
- Converted all Get-WMIObject to Get-CimInstance
- Get-WMIObject has been deprecated and is replaced with Get-CimInstance
- Created Display-ToastNotification function
- 1.7 – Added multi language support. Thank you Matt Benninge @matbg
- Script and config files now supports multiple languages
- Note that old config xml files needs to be updated to support this
- Moved text values in config files from option to the text-section for consistency
- Script and config files now supports multiple languages
- 1.7.1 – Added 2 new options (LogoImageName and HeroImageName) to the config file, allowing switching of images more easily and dynamically
- 1.8.0 – Added support for using Windows 10 Toast Notification Script with Endpoint Analytics Proactive Remediation
- Added support for having config.xml file hosted online
- Added support for having images used in the script hosted online
- 2.0.0 – Huge changes to how this script handles custom protocols. Huge thank you to Chad Brower
- Added Support for Custom Actions/Protocols within the script under user context removing the need for that to be run under SYSTEM/ADMIN
- <Option Name=”Action” Value=”ToastRunUpdateID:” />
- <Option Name=”Action” Value=”ToastRunPackageID:” />
- <Option Name=”Action” Value=”ToastRunApplicationID:” />
- <Option Name=”Action” Value=”ToastReboot:” />
- Added Support to dynamically create Custom Action Scripts to support Custom Protocols
- Added Support for Software (Feature) Updates : Searches for an update and will store in variable
- Added new XML Types for Software Updates:
- <Option Name=”RunUpdateID” Enabled=”True” Value=”3012973″ />
- <Option Name=”RunUpdateTitle” Enabled=”True” Value=”Version 1909″ />
- Added support for getting deadline date/time dynamically for software updates
- Configure DynamicDeadline with the UpdateID
- Added Support for Custom Actions/Protocols within the script under user context removing the need for that to be run under SYSTEM/ADMIN
- 2.0.1 – Updated custom action scripts!
- Moved all custom action scripts into the user’s profile in $env:APPDATA\ToastNotificationScript
- $env:ALLUSERSPROFILE was used previously. This is a bad location if device is used by multiple users due to permission issues
- Updated all custom action scripts to invoke their respective action via WMI
- Rewritten all custom action scripts
- Added logic allowing new custom action scripts to be created if necessary
- Now checks script version in registry
- If newer version is available from the script, new custom action scripts will be created
- This allows me to make sure the relevant scripts are in place in case I change something along the way
- Modified script output of custom script for RunPackageID to pick up Program ID dynamically
- Moved all custom action scripts into the user’s profile in $env:APPDATA\ToastNotificationScript
- Added support for getting deadline date/time dynamically for applications
- Configure DynamicDeadline with the Application ID
- 2.0.2 – Fixed an error in the custom protocols
- The path to the custom scripts was incomplete
- 2.1.0 – Added a second action button: ActionButton2
- This allows you to have 2 separate actions. Example: Action1 starts a task sequence, action2 sends the user to a web page for more info
- This will require new config.xml files
- Reworked Get-GivenName function
- Now looks for given name in 1) local Active Directory 2) with WMI and the ConfigMgr client 3) directly in registry
- Now checks 3 places for given name, and if no given name found at all, a placeholder will be used
- Fixed CustomAudioToSpeech option
- This part haven’t worked for a while it seems
- Only works properly with en-US language
- Added Enable-WindowsPushNotifications function // Thank you @ Trevor Jones: https://smsagent.blog/2020/11/12/prevent-users-from-disabling-toast-notifications-can-it-be-done/
- This will force enable Windows toast notification for the logged on user, if generally disabled
- A Windows service will be restarted in the process in the context of the user
- 2.3.0 – Added the Register-CustomNotificationApp function
- This function retrieves the value of the CustomNotificationApp option from the config.xml
- The function then uses this name, to create a custom app for doing the notification.
- This will reflect in the shown toast notification, instead of Software Center or PowerShell
- This also creates the custom notifcation app with a prevention from disabling the toast notifications via the UI
Troubleshooting Tips
- The script needs to run in the current user’s context. Don’t run Powershell as another user and expect the toast notification to show. That goes for when running the toast with ConfigMgr as well. It needs the user’s context to display the toast notification for the logged on user.
- There are combinations in the configuration which doesn’t make sense and I’m preventing most of them. The best advice here is to look on the included configuration examples and stick to those if things are not working.
- The toast notification has a limit on the sheer size of content. That includes text elements and buttons. You can hit a combination where you have too much text in combination with the snooze option, and you will start seeing the toast rendering without buttons.
- ConfigMgr admins love log files! Paste the log file as a comment with a few words of your issue, and I can most likely give you the reason for your troubles.
- Smile 🙂
Download
https://github.com/imabdk/Toast-Notification-Script
Previous Blog Posts
The documentation on the script is currently lacking information. Instead, I suggest you read through some of my previous blog posts, as they are explaining in details, what each new version and capability is offering:
- Digitally signing my Toast Notification Script to use with ConfigMgr, AppLocker and Constrained Language Mode
- Windows 10 Toast Notification Script Update: Custom notification app and more built-in prevention from disabling toast notifications
- Windows 10 Toast Notification Script Update: Second action button and built-in prevention from disabling toast notifications
- Windows 10 Toast Notification Script Update (Poolside Release): Dynamic Application deadline and custom action scripts updates
- Windows 10 Toast Notification Script Update: Run ConfigMgr Software Updates directly from the action button
- Windows 10 Toast Notification Script Update: Support for use with Endpoint Analytics Proactive Remediations
- Windows 10 Toast Notification Script Update: Multi-language support and easier switching of images
- Windows 10 Toast Notification Script Update: Run ConfigMgr applications directly from the action button
- Windows 10 Toast Notification Script Update: Run ConfigMgr Task Sequences directly from the action button
- Windows 10 Toast Notification Script Update: Retrieve task sequence deadline dynamically from WMI
- Windows 10 Toast Notification Script Update: Check for Active Directory Password Expiration
- Windows 10 Toast Notification Script updated to version 1.3
- Windows 10 Toast Notification Script Update: Personal greeting and protocol based reboot
Hi,
that is a great feature, but how often check the script the uptime and show the message?
And where can i configute the interwall?
Best regards
Robert
You decide how often the script runs by running it on a set schedule. That goes for both running with Configmgr and/or scheduled tasks 🙂
Thanks. It works!
Hello,
I don’t quite get how / where to set such a schedule.
Any help would be apprecciated 🙂
assuming you figured this out – but in you could create a custom schedule task via your own code, or simply create this as a package and have the deployment set to run daily. I think that is what was meant
Can you please answer below points.
a)How this will be deployed?
(b) When this will be deployed?
(c) Frequency of the deployments?
(d) What are the criteria (or) categorized considered to identify machines?
(e) How the success & failures will be measured?
(f) what is the Low Level Design construct or PS Script and other deliverables?
Is it possible to get it to work on win7 and can we modify it to catch exit codes?
I love the simple nudging effect
I’m afraid this is Windows 10 only 🙁 It’s based on an API which is only available in Windows 10.
Hi,
in your previous version the scandinavian alphabets (å ä and ö) were working OK.
In this version they render wrong.
Could this be fixed?
Thanks for your great work!
Hey, great input. I actually never tested that even though I’m from Denmark myself. Let me look into that and get back to you 🙂 I assume it’s due to the text is now set externally in the xml.
What could cause the error for displaying the Notification?
2019-03-14 11:34:10 INFO: No HeroImage file set as parameter. Using local image file
2019-03-14 11:34:10 INFO: No LogoImage file set as parameter. Using local image file
2019-03-14 11:34:10 INFO: Successfully loaded \\sccm04-vm\sources$\Packages\Software\ToastNotificationScript\config-toast-rebootpending.xml
2019-03-14 11:34:10 INFO: Loading xml content from \\sccm04-vm\sources$\Packages\Software\ToastNotificationScript\config-toast-rebootpending.xml into variables
2019-03-14 11:34:10 INFO: Successfully loaded xml content from \\sccm04-vm\sources$\Packages\Software\ToastNotificationScript\config-toast-rebootpending.xml
2019-03-14 11:34:10 INFO: PendingRebootCheck set to True. Checking for pending reboots
2019-03-14 11:34:10 INFO: Running Test-PendingRebootRegistry function
2019-03-14 11:34:10 INFO: Check returned FALSE on ANY of the registry checks: Reboot is not pending!
2019-03-14 11:34:10 INFO: Running Test-PendingRebootWMI function
2019-03-14 11:34:10 INFO: Computer has SCCM client installed – checking for pending reboots in WMI
2019-03-14 11:34:10 INFO: Check returned false on checking WMI for pending reboot: Reboot is not pending!
2019-03-14 11:34:10 INFO: Creating the xml for displaying both action button and dismiss button
2019-03-14 11:34:10 INFO: Toast notification is used in regards to pending reboot. Uptime count is greater than -3
2019-03-14 11:34:11 INFO: All good. Displaying the toast notification
2019-03-14 11:34:11 INFO: Something went wrong when displaying the toast notification
Are you running the toast as another user than the user logged on? 🙂 The toast only runs in the context of the user being logged on as it obviously needs to be interactive and display to the user. If you are running this with SCCM, you need to make sure your program runs in the users context 🙂
Hi again.
Can you explain the MaxUptimeDays Value? What means the value “-3”?
And
Can you fix the script for German language (äöüß)?
Thanks
That was just me testing, going back in time. My computer was just restarted when I did that part, so I had to go back in time with a negative value. MaxUptimeDays is the maximum days a device is allowed to not have rebooted and thus displays the toast.
And…
Is it possible to use the action buttons to reboot the pc?
I’m afraid that’s not possible. A limitation in the API itself and is limited due to protecting the OS 🙂
Would it be possible to start a OS upgrade task sequence directly instead of opening the software center application only?
You have the option to use softwarecenter:Page=OSD to open Software Center directly into the OS page. Not exactly what you are desiring, but close. 🙂
First off all thanks for the solution
Fix ÆØÅ:
To support other ÆØÅ change line 168 – Think it work with german char to but havent testet
$Xml = [xml](Get-Content -Path $Config)
to this
$Xml = [xml](Get-Content -Path $Config -Encoding UTF8)
We needed something like this for our environment but we still stuck with Windows 7 so i created a “form” to serve that side too.
Windows 7 Reboot Notification Form
Posted i here https://gallery.technet.microsoft.com/Windows-7-Reboot-23a8377d
Longquo/DK
A lot of my users have disabled notifications I assume we can enable notifications at the beginning of the PS
I’m curious, how and why are you disabling notifications? 🙂
Thank you for this great feature!
Is it possible to use the Toast Notifications for normal Windows Updates?
Would be amazing, users could defer the updates for some time.
What should be the image sizes?
Hey, I attach two images in the download. Take a look at the the sizes of those and you have a good idea. 🙂
Hello, I am trying to use toast notification to prompt users to install software from Software Center. I would like to give users the option to click on a button to go to a website to get more information about the software that is required to install. I have been able to create the new button but struggling to get the website to open either through Internet Explorer or Edge. Do you know if this can be done and if so, how can I accomplish this?
This looks like it would be great for us. Is it possible to enable translations to default Display Language?
There’s nothing built into the script which would do the translation. All of the text comes from the config.xml for you to customize yourself 🙂
Thanks for the scandinavian alphabet support. Working just nicely!
One question, can the image (heroimage, the bigger one) size vertically be altered anyway if the horizontal size stays the same.
I mean so that the toast wont stretch it automatically to 180 pixels vertically if the image is something like 340×100.
I’m afraid the dimensions are locked from the OS side of things. See here: https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/adaptive-interactive-toasts#hero-image
Hi Martin
It would be great if you can create a Youtube video on step by step.
Hi Marino, no a bad idea – I’ll consider it. Thanks 🙂
Hi Martin,
Nice work, however, I was attempting to show others this script, however, I attempted to run on Windows 10 1809 (OS Build 17763.379). It seemed to process, but did not display the notification. Thoughts?
Hey, what does the log file in programdata\toastnotificationscript say? How are you running the script? Manually? How’s your execution policy configured? 🙂
False alarm. Was just me testing the “TargetOS” option in the XML. LOL. ;-). It works and will not show the toast notification if the running OS and target OS are the same.
Ah, that’s good. Thanks for letting me know 😀
Hey Martin
First: Thank you for that great idea and all the provided work!
I`m now wondering if it is possible to start a powershell script when hitting the “install” button.
Hello Ralf, I’m afraid that’s not possible due to restrictions in the OS. It’s prevented due to security reasons 🙂
Hey, thanks for a very cool solution.
Just a headsup for other users, if you are not using SCCM, make sure to change config file to use PowershellApp instead of SoftwareCenterApp, or else you are not seeing any notifications 🙂 SoftwareCenterApp is not a default Windows 10 app, but comes as part of SCCM.
I would also recommend adding -ExecutionPolicy Bypass to the RunToastHidden.cmd
Hello, first off thanks for your work and sharing this. I believe I have it almost up and running but I’m running into a slight problem. I only get a pop up saying “New Notification” using either PowerShell or SCCM. We do have SCCM installed so would prefer to go that route. I’m not seeing the pop up of the images above do you know where I’m going wrong? Thanks.
Hey, does it work when run out-of-the box directly after download without doing any changes to images and the config? Does the log say anything useful? (programdata\toastnotificationscript\new-toastnotification.log)
Experiencing the same thing myself. Log appears to show all normal info and gives the same result when running the default OOTB configuration.
Hey Nathan, there must be some sort of configuration in your OS preventing toast notifications. There are few which can do that. I’m very curious to know the ups and downs. I’m planning to add some sort of check for blockers, those that I know of making it more clear what’s going on.
I am experiencing the same issue, I am still only at the stage of testing the script by running it manually.
I have run the script using Powershell and Software Center Toast, and have tried running it OOTB on both Windows 10 1703 and Windows 10 1903.
I am experiencing this same issue. It works fine out of the box. Issue seems to be when run as part of a program and from a distribution point or from a network share.
Don’t run it from a UNC path or directly from DP (which also translates into a UNC path). The XML layout in the toast will break if doing so. Create a package, which downloads the binaries into the CMcache. The config.xml can be located on a network share, UNC path etc., but not the script itself.
Martin, thank you for confirming. Might I suggest pointing this out in the SCCM Installation section of your documentation so other may not run into the same issue. Great tool and I am looking forward to using it in my environment.
Good idea and thank you 🙂
Hi Martin, Thank you!!! it is very helpful ?
is it possible to assign tag and group for toast notifications via PowerShell? And is it possible to clear the notifications from ActionCenter conditionally using tag and group?
Hi!
I’m not sure I fully understand your question. Can you elaborate?
Hi Martin,
We want to show toast message to inform the users to reboot the Windows 10 machine.
Scenario:
1. Toast message is shown to the user requesting to reboot the machine.
2. User is moving the toast message to Action Center.
3. After some time, user is rebooting the machine.
But, the toast message exists in Action Center. I want to remove the toast message conditionally from Action Center , when user login again. To my knowledge, this can be achieved by assigning tag to the toast message. Later toast message can be removed from Action Center using PowerShell by referring the tag, but I do not know the PowerShell code to use.
Thanks,
Thangaselvam
Hi Thangaselvam,
Great question. Thing is that I actually don’t know 🙂 Sounds like something I need to study further.
https://stackoverflow.com/questions/39901652/win-10-app-remove-toast-notification
I came across this same need recently and found that if the notification is constructed differently, tag and group can be added, so that they can be used to remove the notification later. (Hopefully the code below displays okay.)
In the Display-ToastNotification function, comment out the line:
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($App).Show($ToastXml)
… and add:
$Load = [Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime]
$Notification = [Windows.UI.Notifications.ToastNotification]($ToastXml)
$Notification.Group = “your-group”
$Notification.Tag = “your-tag”
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($App).Show($Notification)
Then, you can remove the notification later with:
$toastNotifierHistory = [Windows.UI.Notifications.ToastNotificationManager]::History
$toastNotifierHistory.Remove(“your-tag”, “your-group”, $App)
Hope that helps someone, and thanks Martin for this amazing work.
I’m trying to put Dismiss button in FALSE with OSUPGRADE xml but still showing :/
Hey, if you have the Snooze button enabled, that will always include both action button AND dismiss button. You can modify the Powershell script if this is something you don’t want, but currently it’s restricted like this 🙂
Yes i finally found how to do it. I know that my users allways will dismiss the message haha. Thank you!!
Hi Alvaro, would you be able to share how you were able to hide the dismiss button only?
Not an expert at scripting at all 🙂
No scripting skills required in order to do that. Simply configure the DimissButton Enabled to False in the config.xml 🙂
Hi, congratulations for the job done.
Is it possible to assign a command like “shutdown -r -t 30” to the action button?
Thanks a lot and congratulations again
Nick
Hey, and thank you. I’m afraid that the API in Windows doesn’t allow that. The notifications in Windows 10 has very limited actions allowed and running a shutdown command is not one of them. (you are allowed to redirect to other UWP apps, but not run custom code. This is due to security reasons)
FYI
If you are using Bitdefender Endpoint Security Tools, it really doesn’t like the script.
It flags New-ToastNotification.ps1 as malware via it’s advanced threat control, because it’s being executed hidden when running as a sheduled task.
You can instead do something like %comspec% /c start “” /min “C:\ProgramData\ToastNotificationScript\PendingReboot\RunToastHidden.cmd” (edit RunToastHidden.cmd to include an exit), but then it’s not completely hidden when running.
But Bitdefender also doesn’t like, if you are adding the scheduled task via powershell, instead of via a GPO.
I’ve opened a ticked with their enterprise support, to see if this can be fixed with the software.
Thank you for all the additional details based on your environment. Very interesting and appreciated 🙂
No problem, it’s a neat script 🙂
I’ve worked more into the problem, and it appears Bitdefender doesn’t like when executing the powershell scripts unrestricted. So i changed the executepolicy to remotesigned, and that seems to do the trick. Will test a bit further and give a final update on this issue. I guess you could sign the scripts with an internal certificate, to really avoid this issue and run them with AllSigned.
And a final note on this issue. Bitdefender has added exclusions for this script to their signature files. That combined with using RemoteSigned, and it’s not a problem anymore 🙂
Very excited to use this to start nudging my users from 1607 to 1809! Only problem I am having is with an ampersand – which is an unavoidable part of our department name (the line where you have Helpdesk kindly reminding them). Every substitution I’ve tried either makes the dialog fail to display, with the text failing to convert to XML (Error: “‘ ‘ is an unexpected token. The expected token is ‘;’.) or the dialog displays, but with the ampersand missing. I’m thinking maybe I need to double escape it somehow…?
Hey Anne, thanks for letting me know. I will look into this asap 🙂
I figured it out! Not sure how this site may treat the codes so I will put in some extra spaces, but
T & amp ; amp ; I
results in T&I which is what I need.
Hello Martin,
Is it possible for the toast notification to be movable? Also, sometimes, some parts of the text are not shown because of the display resolution.
Hope you can check this.
The toast notification is native to Windows 10 and to my knowledge, it’s not possible to move any toast generated in Windows 10. I haven’t tested weird resolutions/zoom levels I’m afraid, but I will when I get the chance. Thanks for the feedback 🙂
Nice. Got it to work
Nice feature would be multi language. Let the script look at the language settings a user has and apply the correct configuration. If the language is not in a configuration file then use English ( or a default language in configuration)
We have device all over the world. I now put the correct configuration file (translated) on the device of the user trough a GPO attached to the country OU for that user. But there are some user that are in example Dutch OU but speak only English and have there device set on English.
Is there a way of adding a hyperlink to the toast notification script in the description maybe? I’d like to ask users to go to an internal website to take an action. I absolutely love this script! Great job.
Hello Martin!
I would like to ask, how should I deploy this as a program? It’s a simple application? If yes, then how should I “detect” under SCCM?
When I deploy it via SCCM, I need something what can “detect” the actual application deployment.
Should I try with Task Scheduler and simple Powershell script running? Or I should simply push out as a Powershell Script via SCCM?
Regards,
Krisztián
Hi, using an oldschool package here is much better suited for the task 🙂
Hi Martin,
Great Job on this, we are about to upgrade to windows 10 1809 and I found your tool. It looks great.
Is there a way to get it to recognize the swedish letters ÅÄÖ?
It worked great in version 1.
Hi Martin,
I have solved the Swedish letters problem, I just had to Save as with UTF-8 format and then my letters were shown as they should.
I have another request,
When I run the script and choose install/upgrade the Software Center opens but hte SC window isnt in focus and hides behind other windows. Is there a way to make the SC window to be on top?
I have the same problem – After choosing install/upgrade Software Center opens but hides behind other windows. It’s very confusing for users. How to overcome this?
Yeah, I think this is a Windows/Software Center issue, rather than a script issue. I use Start-Process to launch the software center, passing the -WindowStyle parameter to maximized. I’m not sure I can do much else. It’s like referencing an application via the link in the Software Center. If that is being shared, lets say on an email, I see the Software Center sometimes come up behind other applications as well. 🙁
Yeah, I think this is a Windows/Software Center issue, rather than a script issue. I use Start-Process to launch the software center, passing the -WindowStyle parameter to maximized. I’m not sure I can do much else. It’s like referencing an application via the link in the Software Center. If that is being shared, lets say on an email, I see the Software Center sometimes come up behind other applications as well. 🙁
Hi Martin. I am trying to launch powershell localy with my current user and the same if Sccm is runing package with user context than he do not have rights to write log. I am getting this error:
Access to the path ‘C:\ProgramData\ToastNotificationScript\New-ToastNotification.log’ is denied.
and also getting this error:
Toast notification is not enabled. Please check \\server\share\config-toast-reminder.xml file
in xml file toest is enabled <Feature Name="Toast" Enabled="True"
When I change in PS ALLPROFILE to APPDATA notification appears.
SCCm program is runs Only when User is logged on and Run with user rights
I noticed you’ve added Windows 10 Toast Notification Script Reboot Protocol.msi to the package and mentions ToastReboot in the changelog, but no really deeper information about this new feature in documentation. Can you maybe elaborate how it’s intended to be used?
Thanks.
Yeah, of course. I havent had time to update the documentation, sorry about that. I believe the most is mentioned here: https://www.imab.dk/windows-10-toast-notification-script-update-personal-greeting-and-protocol-based-reboot/
I recently found that in my own environment the RunToastHidden.cmd needed at -ex bypass added or the Toast wouldn’t appear. YMMV… just putting it out there for anyone else that find the Toast isn’t appearing.
Thanks Bill 🙂
Thanks heaps. Works really well. When deploying this via Config Manager, how often would you schedule the program? Once a day?
Yeah, personally I run it once a day. 🙂
Hi Martin
Firstly my congratulations on such a great upgrade to SCCM’s user communication.
We’ve been using this for a few months now and was making the upgrade to 1.2 to use the “Restart Now” button.
All works as before but clicking on the “Restart now” button brings a popup with “You’ll need a new app to open this toastreboot”
Any ideas and thanks in advance!
Hey did you install the toastrebootprocol.msi I included in the download and verified the files are there? I mention them in my latest blog post on the subject 🙂
I’m a muppet TY!!!!
Hi, I noticed up above someone posted about adding a hyperlink into it somewhere. I had thought I had asked at one point too. Any chance this is a simple thing to do ?
I’d like to have a link that users can click on for more information or instructions if possible.
Yeah I saw your request. Should be possible with some teaking. I will look into it. Haven’t tried it yet 🙂
Another vote for allowing to have hyperlinks in the toaster text to point to an internal IT Support website. It would be yet another great feature to add to this amazing tool.
So I got the whole working with some modifications.
Notification Popups (with some customization) > its takes to the Assigned OS Upgrade Application on Software Center > the application launches the Upgrade TS.
The laptop reboots…and after some time I still get the Toast Notification. How can I disable it not to run if Win 10 was upgraded to 1809?
Hey, the script is able to run conditionally based on the running OS build. If you set the correct build number in the xml config, the script may run with SCCM but the toast is not shown for the user.
ok, I got this working as suggested, Thank you. I had a wrong build number in their.
Another issue which doesn’t fit in our environment – I noticed, may be again, I missed something. The installation deadline portion.
When the application in this “https://www.imab.dk/how-can-i-in-place-upgrade-to-windows-10-1803-using-powershell-app-deployment-toolkit-using-the-software-center-in-configuration-manager/” is being deployed as “Deployment – It goes without saying, but the application you just created and the upgrade task sequence intended to run, needs to be deployed (both as available in this scenario).”, how the Toast Notification will run it when you specify your own deadline. In this case, as of writing now, I had the deadline mentioned in Toast Notification for Aug 8th, but the installation did not happen.
Am I missing something?
Thanks for your great help.
I’m finding that when using softwarecenter:Page=OSD for the Action button that Software Center is launched but it is not brought to the front as the active window. It is launched but sits behind other open windows. This is difficult for the user to find. Is there a fix for this?
Hi Martin,
could you please assist me with deploying the toast? Our goal is to distribute notification real time to every active pc – so Script is the best option to deploy toast so i did this Script:
New-Item -Path “c:\” -Name “Apps” -ItemType “directory”
New-Item -Path “c:\Apps” -Name “Notifikace” -ItemType “directory”
Copy-Item “\\srv-sccm\PackageSource\Notifikace\” -Destination “C:\Apps\Notifikace\” -Recurse
powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -command C:\NemJiApps\Notifikace\David_kamery\New-ToastNotification.ps1 -Config “C:\NemJiApps\Notifikace\David_kamery\config-toast.xml”
And the resault is, that the toast copies, runs but fails with this in log:
2019-07-29 10:22:54 INFO: Successfully loaded C:\NemJiApps\Notifikace\David_kamery\config-toast.xml
2019-07-29 10:22:54 INFO: Loading xml content from C:\NemJiApps\Notifikace\David_kamery\config-toast.xml into variables
2019-07-29 10:22:54 INFO: Successfully loaded xml content from C:\NemJiApps\Notifikace\David_kamery\config-toast.xml
2019-07-29 10:22:54 INFO: PendingRebootUptime set to True. Checking for device uptime
2019-07-29 10:22:54 INFO: Greeting with given name selected. Replacing HeaderText
2019-07-29 10:22:54 INFO: Running Get-GivenName function
2019-07-29 10:22:55 INFO: No given name found. Using placeholder
2019-07-29 10:22:55 INFO: Creating the xml for no action button
2019-07-29 10:22:55 INFO: Toast notification is used in regards to pending reboot. Uptime count is greater than -7
2019-07-29 10:22:55 INFO: All good. Displaying the toast notification
2019-07-29 10:22:55 INFO: Something went wrong when displaying the toast notification
Can you please help me find out how to deploy Toast via Script?
I am Out of options
Thank you and have a great day!
Jiří
hi
im struggling to get this to run as a package as you need to deploy packages
have you any firther instructions
Hi and thank you for the really impressive script and all the explanations!
Is it possibly possible to insert a hyper link in the text? would like to link to a html page so that users are informed about news.
Thank you
Hello, thank you for the great script.
Is it possible to place a link in the text field that points to a company intranet page?
Many thanks
Great Toast schema, and easy way to make ajustment to the schema. It worked very well with SCCM Configuration Manager, when i copy files to the local system. And made a schedule Task. But I ran into problems if I wanted to make a package that runs in a SCCM schedule. I can see that the package is running on the local system, but I can see that it failed in the ToastNotification log. See
2019-08-27 10:04:02 INFO: No config file set as parameter. Using local config file
2019-08-27 10:04:02 INFO: Successfully loaded C:\WINDOWS\ccmcache\11\config-toast.xml
2019-08-27 10:04:02 INFO: Loading xml content from C:\WINDOWS\ccmcache\11\config-toast.xml into variables
2019-08-27 10:04:02 INFO: Successfully loaded xml content from C:\WINDOWS\ccmcache\11\config-toast.xml
2019-08-27 10:04:02 INFO: Creating the xml for no action button and no dismiss button
2019-08-27 10:04:02 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots. Displaying default toast
2019-08-27 10:04:02 INFO: All good. Displaying the toast notification
2019-08-27 10:04:02 INFO: Something went wrong when displaying the toast notification.
What does it means when it write that error at the last line of the log file ??
It is something to do with the ExecutionPolicy in the command line ?? Or that it is missing the Toast config file. My Command line is the same, but without the config parameter. See
powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\New-ToastNotification.ps1
When I run it fra the local system it works. What is wrong ?
Supply to the content above
Sccm : Program can run : Only when a user is logged on
The Run mode is : Run with administrative rights
No mark in : Allow users to interact with this program
The toast has to run as the logged on user, but without administrative rights. 🙂
Any plans to add notification system for Windows Servers?
can we schedule installation on a specific date or time?
How would I add text containing the Ampersand in your xml file?
Example:
IS&T would like to remind you…
Thank you in advance
I should have read ALL of the posts.
Anne posted the answer…
Sorry and Thank you Anne
Very insterested in 1.4 with the password expiration. When running it, it does not seem to work. Anyone else having similar issues? Was able to make it work after some serious changes, but would like it to work out of the box.
Hey, can you be more specific? What’s not working? 🙂 What does the log say?
I have corrected some issues regarding formatting of the date in the ADPasswordExpiration function. Can you please try to redownload the 1.4.2 version? 🙂
Will give that a shot and see. I can send you a copy of that function too if that will help that way you can see what I changed.
I would very much like so. Always interested in getting better. Please send whatever you have to mab@imab.dk – thank you! 🙂
Sent you the whole script to take a look at.
Appreciate it Mike. I will take a look at it asap 🙂
Also have added code to that will check and see if have pending updates to install. Will share that too if you would like.
What would be the reason why I wouldn’t see the buttons? I’m testing with powershell directly and everything shows except the buttons. It stops at giving me the snooze options. I have the buttons on in the XML. I’m only doing a restart based on a pending reboot. Windows 10 1809. Thanks for any assistance.
Hey, is that also the case if you use the config-pendingreboot.xml I provide in the download? Sounds like you may have hit the max. cap on text, and if too much text in the actual text boxes, the toast will start removing the buttons.
Thanks. That was the issue. I appreciate it!
Hi,
I deploy monthly windows updates using ADR. As I know I cannot put any notification on the ADR.
Now I want to deploy ONLY a Notification for all users using the script. Can I use and deploy your script to my users ONLY as notification?
Regards
Hi Martin,
I have tried to change the text in xml file, but it does not work. I get still the originally text notification.
Any Idea why?
Best regards
Keywan
Hey, are you sure you are modifying the right .xml file? I included multiple examples, but only the config-toast.xml is loaded by default unless you specifically specify another 🙂
Hey again,
I have modified ONLY the config-toast.xml. For example I modified the deadline time and Software Center*www.imab.dk
But nothing change
Can you paste the content of the logfile: programdata\Toastnotificationscript\
Hey Martin. Thanks a lot for the great script. I noticed above some people asking for button which can redirect to a website. I also had similar requirment, as in my organization we needed to use Toast notification to share important communication. To achive it, in the cofig xml i changed the and renamed the action button the “Navigate”. So when i click at Navigate, it redirected my to the provided URL.
I also had similar requirment, as in my organization we needed to use Toast notification to share important communication. To achive it, in the config xml i changed the line (Action Value=”microsoft-edge:URL)and renamed the action button the “Navigate”. So when i click at Navigate, it redirected my to the provided URL.
Martin Bengtsson
October 2, 2019 at 11:05 am | Reply
Can you paste the content of the logfile: programdata\Toastnotificationscript\
Hi Martin,
I found the Error message. I had open the xml file with papad and forget to select utmf 8.
Could you tell me please the following questions?
1) I want to deploy only the notification for user that he can see there are windows or office updates?
2) If the click on the “Snooze” and select 2 hours, where were it saved on the local machine?
3) the same question for “Dismiss”?
Thanks again for help.
Awesome script. I did find an issue for my environment using the Get-GivenName function.
I had to modify line 214 and 217:
214 – added “select -First 1” because seeing this as array sometimes and since the userSID is the same it works
$DisplayName = (Get-ChildItem -Path $RegKey | Where-Object {$_.GetValue(“LoggedOnUserSID”) -eq $LoggedOnSID}| Select-Object -First 1).GetValue(“LoggedOnDisplayName”)
217 – changed split to [1] because our display names are last,first
$GivenName = $DisplayName.Split()[1].Trim()
Wonderful. Thanks for letting me know. I see how the logged on SIDs might return an array and I’ll make sure to fix that for future releases 🙂
Hey Martin,
This is such an awesome script, currently blowing minds with the custom images at my company! I did have one question for you though, I am wondering if there is there a way to get either get the Action button to open a website such as https://passwordreset.microsoftonline.com for the password reset toast, and or add a clickable url link in the body text?
Thank you!
Absolutely. Try this for the action button: microsoft-edge:https://passwordreset.microsoftonline.com 🙂 And thank you!
Is there any way to do this with other browsers?
I am having an issue with a website not being supported by our default browser. If I could prompt Chrome, it would work.
Not all the machines in our environment have Edge. So it would be great if I could prompt Chrome specifically.
Thank you
Hi,
This is a pretty cool feature!!
Is there a way to remove the notification once the upgrade is completed?
Is there a way to change the background color from Grey to others.
Regards,
Sabari
Hi Martin,
Is there anyway to set some text in color?
Regards
Keywan
Hello Martin,
How can I replace any text in color? and how can I add or change the snooze time?
BR,
Keywan
One question. My aim is to run this script as a part of my Win 10 upgrade. I want to run it locally as a task in task scheduler. The reason for this is that some of the upgrades will take place over the internet and we dont have a cloud distribution point (only CMG). I created a SCCM package that is targeted to my deploy collection that creates the task in task scheduler and copies the necessary files to a certain ProgramData folder. I am using “Users” for the “When running the task, use the following user account” but it isnt working. Only users that have admin rights see the notification. Any ideas ?
Does the script actually run and thus write to the log file? In that case, what does the log file say when running the script through the task scheduler in the users context?
Found out what was the actual problem. New users that log in to the computer dont have the rights to modify new-toastnotification log file. Seems that the main use case for this script is when a computer has only one user ?
You can move the log file to a better suited location in the write log function in the first section of the script. Sounds like you want to have a unique log file for each user logging in, thus I’d move it to the users profile 🙂
Thanks 🙂 .
did you read my questions?
Hi Martin,
How often check the script the uptime and show the message?
And where can I configute the interwall? It should popup 3 times during the day.
Is that possible? If yes how?
Thanks
Azam
Yes, that’s possible. You configure the schedule with Configuration Manager or with the scheduled task depending on your choice 🙂
Thanks for replay. with Configuration Manager I can schedule as customer interval for example every 2 Hours. But it popup every 2 hours every day. It should popup only one day but 3 times. With scheduled task I have to do that locally on the machine? How can I do that?
Thanks
I’m not sure I completely understand your request. Can you elaborate? 🙂
Very nice script, thank you so much!
Hello Martin,
super script. Is there anyway to display the “hostname” on the Notification?
Our Users has two windows client machine, it would be nice to have the “hostname” as well on the Notification
Thanks
Hello Steve,
That would be possible, but not at the moment. I would have to add that as an option 🙂
Thanks for replay. Do you know when? Or you can tell me where I can add it himself
I’m afraid it would take some time to implement and not something I can explain how to do on a comment 🙂
Super thanks again
Hello, this is amazing!
We do have one problem in our environment though – powershell constrained language mode. It probably is set by applocker. Wouldn’t want to disable it since it’s good for security. Has anyone any experience with this? What would be the best way to deal with it?
Yep, having applocker forces constrained language mode. To my knowledge, that won’t work with the content of my script. However, scripts allowed by AppLocker rules, such as scripts in trusted directories or signed by a trusted code-signing certificate, should run in full language mode
Hello Martin,
Great script. Thanks for that. Can you increase the snooze time on 1 day?
If yes how?
Regards
I’m not sure if Windows actually accepts a snooze timer longer than 1 day, but I guess you can modify the content of the script in this case. The snooze timer values are in there with creating the .xml for the toast notification 🙂
Hi Martin,
Great and again Great script. What would be nie, is to display the hostname as well.
Is that possible?
It is certainly possible, but not with the current state of the script. I would need to add that as an option 🙂
Hello Mr. Martin,
I use your script on our company and the user is very satisfied. Many users told me if I can set the machine name of the client in the notification. Because our user has two windows client machines, one is locally and the other is remote machine. It is not easy to know which machine has received the notification.
Best regards
Jason
It is certainly possible, but not with the current state of the script. I would need to add that as an option 🙂
Hello Martin,
I have a issue with script. some client does not receive Notification. I did review some settings on the Client.
The REG “HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings” and “Microsoft.SoftwareCenter.DesktopToasts” is enabled. I have disabled it and log off and log on and enabled again, no change.
I try to run on Command line this: C:\Windows\CCM>SCToastNotification.exe “test” “test”, No Notification displayed.
In Windows under “Notifications & actions” settings applet” the Software Center does not appear.
On my machine is showing under “Notifications & actions” settings applet” the Software Center, and I can run C:\Windows\CCM>SCToastNotification.exe “test” “test” and it works.
Login with different user does not work too.
Do you have any Idea what I can do?
Best Regards
James
Hello,
Sounds like the SCCM client isn’t properly installed. You can switch to doing the notification with Powershell. That’s done in the config file. Does the script run, when run manually? What does the log file say for the situation where nothing is shown? 🙂
Hello Martin,
I have uninsatlled SCCM Client and install again. No change. The Reason is the Software Center. That is not displayed on the “Notifications & actions” settings .
Maybe I am wrong.
Regards
Hello, the SCCM Client is installed. The Script does not manually too with no error. I have checked on many machines. If the Software center is not showing on the “Notifications & actions” settings applet”, it does not display any message. I run your script with .\New-ToastNotification.ps1 -Config .\config-toast-osupgrade.xml with Powershell. It is runing without any error, but it is not displaying.
ONLY if the Software Center is showing in “Notifications & actions” settings applet” in windows, then it does work.
But I dont know hwo I can add the Software center in “Notifications & actions” settings applet”.
Regards
James
What I meant was, that you can switch the notification over to being done with Powershell and not rely on the SCCM client. I can’t tell why the SCCM client isn’t properly registered with some of your devices 🙂
What do you mean with Powershell and not rely on the SCCM client?
Could tell me in details?
Set this to True in the config.xml:and set UseSoftwareCenterApp to False 🙂
Thanks again, I did that
I get that error
Get-Service : Cannot find any service with service name ‘ccmexec’.
At C:\users\Nasser\Downloads\ToastNotificationScript1.4.2\New-ToastNotification.ps1:204 char:13
+ if (Get-Service -Name ccmexec) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (ccmexec:String) [Get-Service], ServiceCommandException
+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
Sorry for wrong error,
I see in the log file following:
Error. Conflicting selection in the .\config-toast-osupgrade.xml file
2019-10-17 20:13:28 WARNING: Error. You need to enable at least 1 app in the config doing the notification. ie. Software Center or Powershell
You got it. The error message tells you what to do. Enable UsePowershellApp 🙂
Ok I have disabled them, it is runinig now on the machine without sccm client.
What does mean for me? What is wrong with sccm client? Waht can I do?
I don’t know whats wrong with the SCCM client on your devices I’m afraid, but using Powershell as the app doing the notification is just fine 🙂
Ok Thank you very much. Could you tell where can I search for that issue on the machine with SCCM Client?
From the log file: “Something is not right about toast notifications in Windows. The script will run, but toasts might not be displayed”
Everything else in the log appears fine. Getting the notification the the toast is not displayed. Using SCCM. Any thoughts on what to check that might be preventing the toast display?
Is that coming from running the script manually or with SCCM?
That line in the log file is from checking for the existence of a registry key/value which is normally associated with whether toast notifications are enabled or not in the OS. If you search for notifications in your settings app, you will get a bunch of setting related to notifications. This is also the place where you are able to disable/snooze notifications in general.
Only when running with SCCM package. Went back to “out of box” configs for troubleshooting. Toast displays correctly when running the script manually even though the log file still indicates “something is not right”. Still only getting notification when running with SCCM. I’ve been trying different options within the SCCM package/program/deployment and can’t seem to get it going.
The “something is not right” is looking for the registry key usually indicating whether notifications are disabled are not, but I realize notifications can be enabled without the key present, which is why I allow the script to continue.
If the script works manually, it will work when run with configmgr. Are you making sure to run it in the user’s context?
My program properties are set to “only when a user is logged on” and “run with user’s rights”. Also verified user context in execmgr.log.
Using command from the documentation: “powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\New-ToastNotification.ps1 -Config “\\server\source$\software\ToastNotificationScript\Config\config-toast-osupgrade.xml”
Must be the permissions on the share I was using or the fact that it was a hidden share. The log file didn’t indicate there was any problem accessing or loading the .xml but clearly something wasn’t right. The toast displays perfectly when I put the .xml on a different share or in the sccm package.
Thanks for your help and your work on this script!
Awesome! Thanks for letting me know 🙂
Good Morning,
I’d like to use this toast notification script for reminding users of pending reboots after their windows updates have installed. The updates are deployed via SCCM (1902).
I have configured the toast notification script as package within SCCM and deployed to a test collection. I can see the package in software center, however as the device is pending reboot it will not run as software center says ‘unable to make changes to your software until the computer is restarted’ if running via software center or if waiting for scheduled ‘required’ time in execmgr.log you get “program is ready but can not be started because package, program is currently running”. You can reproduce this behavior by sending a client notification>restart from the SCCM console.
The script/package is able to run perfectly if its not sccm/software center requiring a restart (only PendingFileRenameOperations found in registry).
Is it not possible for it to run whilst the device is pending reboot from SCCM? Wanting to use this temporarily until i’m able to upgrade the platform to 1906 or 1910 and make use of the new built in restart dialogue box functionality.
Regards
Is it possible to adjust toast message duration time?
Right now it displays til’ user clicks on it, but we would like to change it to 30 seconds.
Overall this script is awesome!
Yes, that’s possible from modifying the config file and the option: Scenario. Set this to long instead of reminder and you have it displaying for about 30 seconds.
Is there currently a way to make it only stop display when a user makes a conscious decision (selecting restart or dismiss). I don’t want my users to have the ease of just clicking the toast notification box and having it vanish. I would like it to persist until they click dismiss or restart. Thanks in advanced
Doing further research on this page, I have found someone else asked a similar question. It is true that this functionality is native to Windows and can not be overridden?
Correct. The toast notifications are native to Windows. Similar to any other notification made in Windows, clicking the notification itself is equal to dismissing it. I cannot prevent that.
Thank you, and thank you again for sharing this script. It is a very nice work. Well done!!!!
My concerns are as follow:
When I run it with logon user, it fails due to permission.
Here is the log error:
PS C:\Users\kdkossiv\Downloads\ToastNotificationScript1.4.2> powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File C:\Users\kdkossiv\Downloads\ToastNotificationScript1.4.2\New-ToastNotification.ps1
VERBOSE: Running supported version of Windows. Windows 10 and workstation OS detected
powershell.exe : Out-File : Access to the path ‘C:\ProgramData\ToastNotificationScript\New-ToastNotification.log’ is denied.
At line:1 char:1
+ powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoPro …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Out-File : Acce…log’ is denied.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
At C:\Users\kdkossiv\Downloads\ToastNotificationScript1.4.2\New-ToastNotification.ps1:132 char:48
+ … FormattedDate $LevelText $Message” | Out-File -FilePath $Path -Append
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (:) [Out-File], UnauthorizedAccessException
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand
VERBOSE: Something is not right about toast notifications in Windows. The script will run, but toasts might not be
displayed
Out-File : Access to the path ‘C:\ProgramData\ToastNotificationScript\New-ToastNotification.log’ is denied.
At C:\Users\kdkossiv\Downloads\ToastNotificationScript1.4.2\New-ToastNotification.ps1:132 char:48
+ … FormattedDate $LevelText $Message” | Out-File -FilePath $Path -Append
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (:) [Out-File], UnauthorizedAccessException
+ FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand
How can I run it as a system and just select the logged user name to display it on the toast notification?
When I run it as System or admin it can display because it need a login user. (logs):
ERBOSE: Running Get-GivenName function
VERBOSE: Given name retrieved from Active Directory
VERBOSE: Creating the xml for displaying both action button and dismiss button
WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
VERBOSE: Toast notification is used in regards to pending reboot. Uptime count is greater than -6
VERBOSE: All good. Displaying the toast notification
WARNING: Something went wrong when displaying the toast notification
WARNING: Make sure the script is running as the logged on user
The script needs the current user’s context. If another user created the log file in programdata, it’s possible that another user won’t be able to write to the file. You can move the log file into the users profile instead, ie. appdata.
Hello Martin,
We’ve carried out a quick test on some Windows 10 version 1511 (10586) clients and the notification is generated less the images and main text. Is this a limitation on the OS version as it certainly works well enough on version 1709 and above?
Hello, yeah there are certain requirements to minimum 1709. btw, don’t use 1511 – it’s no longer supported 🙂
Mr. Bengtsson,
Great Script, I like it. Is there anyway to display the machine name or hostname too?
Regards
Nick
Dear Martin,
I can only say super job and super script. I agree with other users and would be very nice to have the host name as well.
many thanks
Jane
Good evining,
I have asked before some weeks ago about hostname.
Do you have any news? I would like to have the hostname to display in the notification
Regards
Steve
I will, when I have time to take a look on the entire script again. I’m sorry, I’m not working on the script every day.
If you are familiar with powershell, you could also do it yourself 🙂
Hello,
I’ve created sccm package and add client program run with administrator rights but it just run the program when the loged user has a local administrator rights. If the user hasn’t a local administrator rights it doesn’t appear toast notification on the user screen. How can i run the program without local admin rights?
Regards
Jack
Hey Jack, don’t run the program with admin rights.The toast notification needs the user’s context.
Hello Martin,
If i run the program with user rights. Powershell appeared on the screen and disappeared but toast notification did not appear on the screen. I’ve looked the software center the app seemed retry.
Regards
Jack
What does the log say? 🙂
2019-10-29 19:49:45 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2019-10-29 19:49:45 INFO: Something is not right about toast notifications in Windows. The script will run, but toasts might not be displayed
2019-10-29 19:49:45 INFO: Successfully loaded \\sccm16\shared_files\everyone_share\config-toast.xml
2019-10-29 19:49:45 INFO: Loading xml content from \\sccm16\shared_files\everyone_share\config-toast.xml into variables
2019-10-29 19:49:45 INFO: Successfully loaded xml content from \\sccm16\shared_files\everyone_share\config-toast.xml
2019-10-29 19:49:45 INFO: Greeting with given name selected. Replacing HeaderText
2019-10-29 19:49:45 INFO: Running Get-GivenName function
2019-10-29 19:49:45 INFO: Given name not found in AD or no local AD available. Continuing looking for given name elsewhere
2019-10-29 19:49:45 INFO: Looking for given name in WMI with CCM client
2019-10-29 19:49:45 INFO: Creating the xml for no action button
2019-10-29 19:49:45 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2019-10-29 19:49:45 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2019-10-29 19:49:45 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2019-10-29 19:49:45 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2019-10-29 19:49:45 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2019-10-29 19:49:45 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2019-10-29 19:49:45 INFO: All good. Displaying the toast notification
2019-10-29 19:49:45 WARNING: Something went wrong when displaying the toast notification
2019-10-29 19:49:45 WARNING: Make sure the script is running as the logged on user
!2019-10-29 19:49:45 WARNING: Make sure the script is running as the logged on user! is the culprit. Don’t run it as system, run as the logged on user 🙂
Hi Martin,
Just stumbled across this, really really usefull but i am stuck, using sccm 1903 the software center “OS” tab does show a ‘share’ icon to get a url to apply to “Action” value=”ToastReboot:” is there another way to generate the url ? i have tried searching online but can find nothing ! My users will need this
Triggering a TS directly from the toast requires some additional steps. The best approach is to have an application, triggering the TS. This I have covered when using PSADT to upgrade Windows 10. Search on my blog 🙂
got it, thank you! but need to post another question 🙁
I’d like to find the scopeID/ApplicationID of a specific Task Sequence so I can link to it directly in the ToastNotifications script but in version 1906 of Configuration Manager there is no longer a link to the Application ID in Software Center and I cannot find the ID in the Configuration Manager console. Do you have any idea how I can retrieve the direct link to a non OS related Task Sequence published under Applications in Software Center? Would make my migration to Office 365 perfect if I could combine it with a shiny toast notification.
I don’t know of a way where to directly initiate the Task sequence through a protocol based action, but you can do somethin custom calling a script where it’s possible. Take a look at my post about updating windows using PSADT, there’s a script included which does it.:
I will look into that. Maybe a feature for future versions could be to call s script when pushing the Action button which would make it possible to do a whole lot of other things when using a Toast Notification. So far it’s a great addition.
Hello Martin,
I like your script and I use it in our company. What about display the host name as well?
Best regards
Roger
Hi Martin,
Great script!
We already use it for ADPasswordExpiration.
Right now i’m testing the UpgradeOS part.
The ToastNotification comes up, install is pressed and softwarecenter:Page=OSD opens.
But here comes the problem.
In the OSD page we have four task sequences.
– Install Windows 10 Education incl. Office
– Install Windows 10 Education without Office
– Install Windows 7 Enterprise incl. Office (This will shortly be deleted, when Windows 7 get’s out of support).
– Upgrade to Windows 10 version 1903.
I’m afraid we will have some users, who’s not sure which task sequence to pick.
So we risk some users will pick “Install Windows 10 Education”, which will format the disk and install a brand new OS. Instead of upgrading the OS.
Are there a way to point out the specific task sequence (Upgrade to Windows 10 version 1903)? Or maybe even call the task sequence directly from the powershell script?
Hey Michael. There are a few options. You could point the action of the toast into an application instead. In the application, you run a powershell script which initiate the very specific task sequence. I have shared a script which calls a TS by name in an earlier post here: https://www.imab.dk/how-can-i-in-place-upgrade-to-windows-10-1803-using-powershell-app-deployment-toolkit-and-sccm-system-center-configuration-manager-part-2/
Another option is to create a custom protocol in your Windows clients which essentially launch the same script. This will require that you drop the script onto each client and create the protocol, similar to the reboot protocol I explained here: https://www.imab.dk/windows-10-toast-notification-script-update-personal-greeting-and-protocol-based-reboot/
Hope that helps 🙂
Hi Martin,
I have tried to follow your guides to create a PSADT application, but when I get to the point where I create the application, I get this error message:
“An application should have one or more deployment types with the installation behaviour “Install for System”.”
And if I change the Install Behavior to “Install for System” it won’t work when I run it via Software Center.
Hi Martin,
I have tried to follow your guides to create a PSADT application.
But when I will define Installation behavior, and select “Install for User” i get the following error: “An application should have one or more deployment types with the installation behaviour “Install for System”.”
Hi, do you happen to have multiple deployment types on the application? 🙂 if so, that’s the reason.
This sounds awesome!
Will test them out, however i have a request.
Is it possible to create one for a collection with low amount of disk space?
We’ve experienced that some user’s are not good at cleaning their PC’s themselves.
Would be nice to use this tool to give them a reminder on this especially if you are running windows upgrades
Sure, that’d be possible. I figure you already have a collection consisting of devices which are running low on disk space. Simply deploy a custom toast to that collection 🙂
I get an error 0x1(1) in Software Center every time it tries to install.
ToastNotification.log doesn’t say anything.
I assume it has something to do with user rights.
Tested to run the program with administrative rights, then the Toastnotification log updates.
The user account have access to the share. Is their anything i’m missing here? Can a regular user even run a PS script?
I haven’t edited the XML’s so everything is pretty much by default
Several options: 1) Try to delete the current ToastNotificationScript folder in C:\ProgramData and rerun the package/program. It has to run with user rights. 2) Move the log file into the user’s profile in $env:APPDATA instead. You bypass the execution policy by running it like so: powershell.exe -ExecutionPolicy Bypass
If the folder/logfile in programdata was created by another user, I have seen this will result in unique permissions on the folder preventing other users to append to the log file. If so, the script will fail horribly 🙂
Thanks a ton mate! Deleting the folder in Programdata did the job. Now it works like a charm 🙂
Hi,
Great script. I am in the process of making changes for our company to have the toast notification appear in the language installed on the computer. We have 19 languages, so i am including the translations for each language in the XML file. Let me know if you are interested in the modifications.
Hi Dawn, very much so. I would appreciate if you would sent those over on e-mail at mab@imab.dk. Thanks a lot. Contributions are very much welcome 🙂
So i’ve played a round with this a bit now and seems great so far.
However i have one issue so far and it might not be something you can help with but i just wanted to hear if you have any suggestions.
In the XML i’ve modified the Action button to open a specific webpage:
<Option Name="Action" Value="https://website.com&sys_id=a3f50914db194450165992b8db96192d"
Can't share the specific webpage but it's only the last part that triggers an error.
This is from the log: Error message: Cannot convert value "System.Object[]" to type "System.Xml.XmlDocument". Error: "'=' is an unexpected token. The expected token is ';'. Line 22, position 99."
If i remove the last bit "&sys_id=a3f50914db194450165992b8db96192d" it works. But then it doesn't go to the specific spot on the website as supposed to.
Do you have any suggestions?
I have this as well, did you ever fix this?
Hi Mathias,
In case you need it – fixed it by using a URL Shortener >> https://www.shorturl.at/shortener.php
make sure that you add https:// to your shortened URL, or the action does not launch a browser
<Option Name="Action" Value="https://shorturl.at/xxxxxx"
Right, some of the characters will not go well with the script. Some characters will need to be escaped. There are some suggestions on how to do that in this comment section, but a URL shortener is a great workaround 🙂
Hi Martin,
I have got the OS upgrade toast to work of sorts, using SoftwareCentreApp I have set scenario to long but none of the text displays. Ii have checked all the formating but all the users get is GreetGivenName followed by the three buttons action, dismiss, snooze ?
Best advice here must be to start fresh from one of the configs I provide in the download. I’m not sure where the error is, but sounds like you have been messing around with the various options and now hit something unsupported 🙂
is the actual syntax for “scenario” type=”reminder” “reminder | long” or “reminder | short “, i think i made an error by changing it to “scenario” type = “long” ?
Hi Martin,
thanks for this wonderful notification tool.
Can you let me know how to clear the toast notification saved to action centre. As after reboot, still has multiple events in the action centre when they use the snooze button. Is it possible to include the command “CreateToastNotifier($Appid).RemoveFromSchedule” in the reboot process Thanks for any input.
This would be great. Seeing 5 of the same toast notification in the command center is not very pleasant
This is duly noted. I’m not using the snooze option myself much, so I haven’t caught that one.
First of all, I want to see this is a very good script, and thank you for sharing with us!
My question is that is there a way to instruct the script to use the picture globally?
example, I have the xml shared out on my test server (the ad password one) and the powershell script I have another pic to use. I also have GPO which is replacing the file on the client, right? For some reason if I don’t have the pic I want on their local pc, it’s not reading off my server correctly which involves no pic.
So with my testing, it looks like the picture needs to be in both the programdata folder for the client and also on the server. Is that true?
Thanks again.
Hello, the images used by the script must exist in the same folder as the script, as the script is instructed to only look for those images in the running directory. Hope that makes sense 🙂
Hello, Martin,
Yes that makes sense. Thanks for your help.
Hi,
In newer SCCM builds there’s an option to import PowerShell scripts & execute it on devices by rightclicking on the device. However I suspect SCCM does not do this in user context. Would there be any way around this because we would like to send the toast manually instead of through a scheduler. Would there be a way to have PowerShell check the active user on the computer & then execute itself in that context?
Correct, that is done in system context. You would have to come up with something to invoke the script as the logged on user. It’s doable, but not something that’s currently baked into the script 🙂
Maybe that’s not a bad idea for an upcoming version, allowing the script to run from system invoking the logged on user’s context 🙂
Hello I am testing the solution in a lab.
I followed the guides so far.
When I deploy the package it shows in the log success showing the message.INFO:
“All good. Displaying the toast notification”
But I do not see any message.
Later on when I run it from the SW Center it shows up.
Do you know what could be the reason?
I have spent a few hours trying to figure out if I can control the behavior of when my customer’s click the body of the notification. Currently, if you click it it will either disappear or be moved to the action center. I would like to be able to either keep the notification open and only respond to the action buttons (Install, Snooze, Dismiss), or just open the Software Center. Is this possible?
The behavior of clicking the notification, regardless of it being on the buttons or not, is native to Windows and not something I can control in the script I’m afraid 🙂
Hi Martin,
If a user click on body of the notification, it disappear (Native feature on Windows)
But it never show again ?
In case of reminder I would like that the notification show again even if user click on body…
Is there a way to do this ?
In order for the notification to show again, you would have to rerun the script. This is where a recurrent schedule comes to play. Dismissing the notification will dismiss that instance of the notification and nothing in Windows will make it return automatically. You will have to trigger another notification for it to show again. Hope that makes sense 🙂
This is not critical as this kind of script will probably be deployed in program files or similar:
if script path contains ampersand (&) script fails when creating toast layout.
Hi,
Can you please give the steps to configure this using Group policy for password expiry
In the attached documentation of the download, there’s an example of using the script with group policy and scheduled tasks 🙂
Hi
I tried it. But it didn’t work. Schedule task is not working. When i run the same arguments using the cmd in that pc. It shows the toast. But when i try to do it with group policy schedule task toast is not showing.
Are you making sure the scheduled task is running in the user’s context? Are you following the directions I made in the documentation? Is anything logged to the log file?
Its working now. But i have another problem. As we configure this for ou which contain client pc’s. and not for the server ou. Same user when login in to servers gives wscript error that hidden.vbs is not in the mention location. As i configure file copy part in computer configuration it does not copy files to servers. So.is there any way to hide this error.
I’m not sure I follow. If you target this to a specific OU only containing workstations, how is this then run on servers? Are you targeting the GPO to all o your users? Don’t do that 🙂
Hi
In a previous response, you said that you are able to notify a user for pending updates.
This would be really useful for us. Please could you share the info?
Thanks in Advance.
Hello,
First of all, thank you for this great job, these notifications are awesome !
I would have one question regarding the special characters encoding in the “config-toast.xml” file.
Indeed, for the following line (action button), I am trying to set a “mailto:” link with a body message in arguments. However, it seems it does not like the “&” character (I have already tried to escape it using hexadecimal code and [CDATA] tag but to no avail, unfortunately).
Here is the line I am trying to use at the moment (using the PowerShell app mode) :
Have you already encountered this issue in the past ?
Thanks in advance.
Hi Fred,
Did you manage to fix it. i have a same requirement to send e-mail by clicking on the action button.
Thanks a lot in advance
Hello,
This script works very well except for users who have a duplicate screen.
I can’t figure out how to handle this by GPO.
Olivier
Hey Olivier, what happens when the user have duplicate screens? 🙂
Hi,
The notification does not appear. To see it, we need to click on the notification center.
By setting the Focus Assist to DISABLED and deactivating “When I duplicate my screen” it works but it must be done on each profil of each station.
I am looking for a way to manage this via the registry or a GPO, I have 600 computers concerned with interactive whiteboard.
Thx
I see… You are not alone on this one I believe. I don’t think focus assist currently can be managed via registry or gpo. You might need to look into using procmon or similar to locate where the settings are being stored.
Yes i used ProcMon but I found nothing.
VERBOSE: Toast notification is used in regards to pending reboot. Uptime count is greater than -6
VERBOSE: All good. Displaying the toast notification
Yet I get no toast notification
Hello, does the toast notification perhaps go straight to the action center? Do you have focus assist enabled by any chance?
I really like the look and features this SCCM add-on provides, and having compared a number of possible solutions to manage notifications on our SCCM clients, I decided on trying out your script which I have just downloaded (the latest version of your Windows 10 Toast Notification Script from the Technet Gallery – https://gallery.technet.microsoft.com/Windows-10-Toast-9f228eb1)
Unfortunately when I extract the zip file my Anti-Virus (Trend Micro) complains that the zip contains the HackTool.VBS.InviBat.A spyware within the ‘hidden.vbs’ file (https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/HackTool.VBS.InviBat.A)
Are you aware of this issue?
Is the hidden.vbs integral to the Toast Notification script?
If not, are you able to supply a copy of the Windows 10 Toast Notification Script without the hidden.vbs file?
Thanks in advance.
I have heard that before, and the .vbs file is only included if you want to run the script completely silent using group policy. You can ignore the file if you intend to use this solely with configmgr. I’m not sure why some AV’s flag that file as malicious, but I think it’s due to the nature of the file running something silent and off the grid. Note: Defender doesn’t flag it, so I assume most is not running into that issue. Thanks for letting me know though 🙂
Hello,
great Script! Is there an overview for all the actions that can be executed by the ActionButton? I know that the actions are very limited due to the Windows API.
Thank you! Basically all protocol based actions can be run from the toast’s action button. That also goes for any protocols you may create yourself. Some of my other posts on the topic touches base with this as well. 🙂
Hello,
This script is great and has been really useful for prompting OS upgrades where I’ve used it in the past. However, I’m trying to set this up for user pending reboot prompts. It seems to be working OK but I’m finding an issue where your script does not re-enable software notifications if its been disabled by the user (vis notification settings in control panel).
I can see your script is checking for and setting the registry value: HKCU\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SoftwareCenter.DesktopToasts to an enabled value of 1. If I turn off software centre notifications through the control panel notifications GUI, then allow the script to renable this registry value it does not re-enable the toast messages. The only way round this I can find is to use the GUI once again to turn notiffcations for software centre off – then back on. Once I have done this I then get the toast notifications displayed again. I have been unable to prevent users disabling software centre notifications via gpo either so I’m not able to use this reliably at the moment. I’m testing on Win 10 1909 with SCCM 1906. Is this something you are aware of? Thanks Nick
Hi Nick, Martin,
@Martin well done for this really great job !!
I have the same issue as @Nick.
If a user disable notification from GUI, the script set “Enable” registry value to “1” but it’s not efficient…
The only way to re-enable the notification is to activate it from GUI.
@Nick, @Martin have you an update about this ?
Best Regards,
Clément
Yes, issue is that the settings is stored in AppData\Local\Microsoft\Windows\Notifications\wpndatabase.db.
If a notification hasn’t been sent (since the user disabled it), there’s maybe a (of course not supported) way: stop the service WpnUserService, delete/rename the wpndatabase.db file, delete the regkey “HKCU:Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SoftwareCenter.DesktopToasts” and restart the service again – a new db file is created and afterwards the notification can be sent successfully. Disadvantage of course: most of the notification settings are lost. Basically the old/renamed db file could be written back to get the settings back.
Hello!
I’m facing a problem with the notification’s behavior and so far, I was unable to find an answer in the Microsoft Doc and I suspect that what I want to do is impossible. I think that with your experience related to notifications, you might prove me wrong (Or tell me that it’s indeed impossible)
I’m using your script with the AD password expiration option. The notification is displayed using a scheduled task. I went with a “On logon” trigger at first but many users never disconnect their session and they might never see the notification.
So I moved to a trigger at a fixed hour, repeated every days. The problem is that is the session is locked when the time for the trigger happens, the notification is not displayed and it’s simply stacked in the Action Center for you to read it. But many people aren’t aware of that feature so I wonder if there’s an option related to notification (I’m not afraid to modify the XML if needed, I could even push a PR after that if I’m successful) that force it to “reappear” somehow when you unlock your session and it had been waiting for you. Or maybe a way to trigger the same kind of notification from the Focus Assist that tells you you have pending notifications.
Any idea?
Hello Michael, I think your troubles might come from you preventing notifications to be displayed on the lock screen (and for good reasons), and I’m pretty sure that if the session is locked and a notification is displayed behind the scenes meanwhile, this notification will simply be dismissed directly into the action center. I’m not completely sure, as I haven’t tested this specifically, but I think this must be related to some of the customization that’s available in the OS around notifications in general 🙂
Thanks for your quick answer Martin.
I am fiddling with the notification settings a bit as I write this answer and if I can’t find a solution that fits my need, I will go another route. A task scheduled each time the session is unlocked and a registry key from your script to check the last time the notification has been displayed. If it’s today, do not display it again. If it was at least a day before, display the notification and update the last run date in registry.
A bit more taxing as their might be many triggers a day but the users won’t be harassed in spite of everything. 🙂
And it’s done. I have added a condition to limit the display of the notification one time per day with the corresponding setting in the XML config file so that it’s a setting that can be used per notifications (If you have more than one running). I still need to add another option to enable / disable this behavior.
If this is something that you are interested in adding to your script, feel free to send me an email so I can share my modifications with you. 🙂
Absolutely Michael. Contributions are much appreciated. I will send you an email. Thank you 🙂
Wondering if this was ever added into the toast script
Actually, they are, in a version I haven’t released yet due to sheer corona-laziness. Apologies. I hope to make up for the slacking soon enough.
Hi Martin,
I am having trouble running script as a currently logged on user using SCCM. I have created package with all required files > Created a program with cmd line %winDir%\Sysnative\windowsPowershell\v1.0\Powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -File .\New-ToastNotification.ps1 -config .\config-toast-osupgrade.xml
Only when a user is logged on > Run mode “Run with user rights”
Looking at execmgr.log > Program Failed with error code 1
How do I test this when logged on user don’t have permissions to run scripts?
Hey, any particular reason for you forcing powershell to launch through sysnative? Also, what does the log file say? The log should be located in AppData\Roaming\ToastNotificationScript\New-ToastNotification.log
Hi Martin,
Pls ignore my above comment, it was issue with our Software restriction policy which was stopping PS to run as logged on user.
Thank you for your Amazing job with notification.
Dear Martin, great script.
is it possible to trigger from your toast Notification directly a specific Task Sequence?
I assume it should be added at the NAME=Action” Value=”” if yes how to add the command?
Thank you for your help
It’s possible, however you have to create your own custom protocol in Windows. You can trigger a TS directly by it’s name using Powershell, as of such, you can create a protocol in Windows, which invokes such script (the script has to be found locally as well). Now, when using this new protocol, you will be able to trigger the TS directly from the toast.
It’s difficult to explain here in a short comment, but I think I will do a blog post on the topic asap 🙂
It will be great to have a blog post on this topic. Right now the only way to launch the TS is to direct users to an Application or OSD TS in Software Center which requires them to click “Action/Install” twice (once on the toaster, and again within Software Center).
Thanks for this great tool by the way!
I actually did a post on the topic: https://www.imab.dk/windows-10-toast-notification-script-update-run-configmgr-task-sequences-directly-from-the-action-button/ 🙂
Thank you Martin!
Hey Martin,
thanks for the script. What about the computer name, display on the display`?
Hey Martin!
Love the script and been using it a lot in my environemnt.
I have a couple of users who never got my Windows 10 Upgrade prompt because they manually disabled notifications in their action center. Didn’t know if you had a way to re-enable notifications (maybe just for software center/powershell)?
Couldn’t really find a good answer googling away this morning…was hoping you had an answer. Thanks!
I’m not sure, but I will try to give it a second look. I think I have been looking for it previously without luck. I’ll give it another shot 🙂
I wrote a little crappy CI to discover if these keys are set or not. It hasn’t been thoroughly tested, but I believe it works. I think it needs a reboot for the keys to start working too.
#remediation
$key = ‘HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications’
$Key2 = ‘HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SoftwareCenter.DesktopToasts’
$ToastProperty = Get-ItemProperty -Path $key -name ToastEnabled
$SCproperty = Get-ItemProperty -Path $key2 -Name Enabled -ErrorAction SilentlyContinue
if ((($ToastProperty -eq $null) -or ($ToastProperty.ToastEnabled -eq “1”)) -and (($SCproperty.Enabled -eq $null) -or ($SCproperty.Enabled -eq “1”))) {
Write-Host Compliant
}else {
New-Item -Path $key -Force
New-ItemProperty -Path $key -Name ToastEnabled -Value 1 -Force
New-item -Path $key2 -Force
New-ItemProperty -Path $key2 -Name Enabled -Value 1 -Force
New-ItemProperty -Path $key2 -Name ShowInActionCenter -Value 1 -Force
}
Also wrote a little section to only display to the user if their session is currently unlocked. This was some feedback given to me by a couple of my users:
$currentuser = gwmi -Class win32_computersystem | select -ExpandProperty username
$process = get-process logonui -ea silentlycontinue
While($currentuser -and $process){
Write-Host Locked
$currentuser = gwmi -Class win32_computersystem | select -ExpandProperty username
$process = get-process logonui -ea silentlycontinue
start-sleep 60
}
sleep 10
write-host Unlocked
Thank you Dylan for all of this – I will take a closer look 🙂
Hi Martin!
Thank you for the great script! We are running into a problem with the notifications and are hoping you can help. Our scenario is this:
The toast notification is deployed as a package via SCCM and is scheduled to run daily at 3pm checking for pending reboots in the registry/WMI
We also have monthly Windows updates with a deadline/forced reboot
Here’s the rub, if the Windows updates are installed and the user snoozes the SCCM reboot dialog box, our custom toast notification stops running.
Nothing is written to the toast notification log at all however, our execmgr log displays the following error:
“A duplicate execution request is found for the program Toast Notification”
Once the user reboots, the toast notifications resume running as scheduled.
We would like to have Windows updates install automatically and allow the user 3 days before the enpoint is forced to reboot. During this time, we want the custom toast notification to run as scheduled. Is this at all possible?
Hey Trish,
We have a similar request as well with regards the 3 days notification prior a reboot.
Did you get any further with this?
I have tried this on a clean OOB machine as well as in our production environment, and in both I am receiving no toast popup. I am sure that I am doing something incorrect, as it looks like everyone else here appears to be getting this to work for them.
If I download the zip/extract locally on a laptop that was fresh out the box(Win 10 1809), and run the New-ToastNotication.ps1 Should the notification populate? I get a warning stating “Conditions for displaying toast notifications for UpgradeOS are not fulfilled” but the script continues on. I have merged the ToastRebootProtocol reg file as well. Any ideas would be much appreciated. Without actually getting the toast notification windows to populate, I am struggling to get started with troubleshooting.
Thanks in advance for any help provided.
Hey, if you do a fresh download and run the New-ToastNotification.ps1 without specifying a config.xml file, the script defaults into using config-toast.xml. This config is configured to look for uptime of the computer and not upgradeOS, so you must have done some editing of the config files already? 🙂
Also, can you paste the log file from appdata\roaming\toastnotificationscript? 🙂
Hello
Having issues getting the TOAST to display. When I look at my task sequence logs running this script I see an entry during the password expire check steps that states:
VERBOSE: Something is not right about toast notifications in Windows. The script will run, but toasts might not be
displayed
I do not have a GPO prohibiting toast and I ran criteria in the task sequence to run during a log on, everyday.
Is task sequence the best option for these scripts?
Can you clarify. Do you run the script coming from a task sequence? task sequences run in SYSTEM context. That will not work, as the script needs the current users context.
I ran from a program and task sequence. I did also turned off the feature to ask ” which program to open” from office as it was being triggered when I ran it as a program. Is running from a program the best option? I did abandon the task sequence. thank you
Hello,
I am a beginner and I have a problem. I would like to directly launch another powershell script from the action button
I modified this in the file : config-toast.xml
Should we do it another way?
Thank you for your reply
Would it be possible to insert a countdown of some kind, and then automatically have the actionbutton pressed when the timer run out?
Hey, not to my knowledge I’m afraid. I have studied the documentation of the toast notification feature within Windows 10 and I haven’t read anything about such feature 🙂
Damn – would be nice to have the option to force a reboot after a period of time.
you can specify that with GPO, I have mine set for 7 days from restart being required 🙂
Greetings,
I found this to be a great tool, but I have a question. On the restart button, can you tell me where that file needs to reside or how it calls to the msi file?
Reason I ask is because we want to reset the time to allow more time for my users if they want to reboot but we also want to add a few more checks for other apps. We are trying to find out the piece of code that has the button call for the cmd.
Thank you in advance.
Have you seen my latest post on how to initiate a TS dirrectly from the toast. That should get you started 🙂
Maybe I missed it but I don’t think it is implemented yet.
You can have multiple config files in a folder/package but only one ToastHeroImage.jpg and ToastLogoImage.jpg.
I want to have different images displayed with the different configs I use but I don’t want to create a new package for every config just because I need another ToastHeroImage.jpg. Might it be possible to make the images customizable in the config-toast.xml so you can have different images in one package? Maybe the image can have the same name as the xml file to make it more easy to see what images corresponds with a xml configuration file? So Config-Toast-Diskspace.xml has a corresponding image of Config-Toast-Diskspace.jpg and Config-Toast-Diskspace-Logo.jpg ? Or add an option in the XML where you can type the name of the used JPG images.
Thank you for the feedback – I will take that into consideration. For now you will need to create separate packages for the separate purposes 🙂
Hi Martin, thank you a lot for the nice Toast UI.
I have some remarks:
– Toast Notification is displayed on lock screen. How can i avoid it?
– Is it possible to get a schedule Button?
– When i press “snooze” the notification go away and come back after the specific time. It would be nice when the notification remains in the notification center. When the notification pop up for the first time and i do nothing it goes into the notification center.
Thank you!
Kind regards
Andreas
Hi! A nice extension would be some requirements check, before the action button could use.
– VPN is required when the device is on external network (we have a lot of road warriors)
– Device is on battery and need to be plugged in
– Storage check
Best regards
Andreas
Hello, first thx a lot for this really cool notification script ! We’re using it for pending reboots and now we’re trying to use it for the Windows 10 Inplace Upgrade to 1909. During testing and the first wave of pilotusers I’m asking myself how can be ensured (and monitored) that the user REALLY got the notification (for the IPU it’s essential since there’s a deadline) since it’s possible that the user disables the notification for Softwarecenter or also Powershell. Only setting the ‘Enabled’ regkey doesn’t enable the notification again (in the GUI in the system settings it seems to be enabled but it isn’t) – as far as I could find out because this change isn’t written back to the “wpndatabase.db” in the userprofile (%localappdata%\Microsoft\Windows\Notifications).
Regarding monitoring if the notification has been really sent, it can be achieved via Windows Event Viewer – there you can see if a notification has been sent to the user. This is at least one indicator that something went wrong. (Get-WinEvent -LogName Microsoft-Windows-PushNotification-Platform/Operational | Where-Object {$_.Id -eq 3052 -and $_.Message -like “*Microsoft.SoftwareCenter.DesktopToasts*”} | Select-Object -First 1)
If a notification hasn’t been sent (since the user disabled it), there’s maybe a (of course not supported) way: stop the service WpnUserService, delete/rename the wpndatabase.db file, delete the regkey “HKCU:Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SoftwareCenter.DesktopToasts” and restart the service again – a new db file is created and afterwards the notification can be sent successfully. Disadvantage of course: most of the notification settings are lost. Basically the old/renamed db file could be written back to get the settings back.
Great thoughts, thank you for sharing those. I’ve spent some time myself into looking on something similar, but came to the conclusion it wasn’t worth the troubles. If user’s are disabling notifications, because there are no way to prevent it, we stick to telling people they can’t do that. If they do regardless, they are the cause for their own troubles. We have managements word for that as well.
However, your findings are interesting and I will surely be looking into those myself. Again, thank you for taking your time to reply 🙂
Hi,
for the beginning just to say, great work mate!
I was wondering if you thought about putting custom logs path into the XML customization file rather than ps1? 🙂
Great idea thanks for sharing that 🙂
Hello Martin,
Thanks for this. I am running this toast notification through task scheduler. I am running this notification everyday at 12:00 p.m. I have deployed the task sequence and deployment type is required and provided the deadline date. There is slightly confusing situation occurred for me. I have created a dummy task sequence to delete this notification. Dummy TS started and deleted the scheduled task but already running notification remains there in the action center. Is there a way to remove this toast notification?
Thanks,
Dharmesh
Is it possible to get swedish å ä ö Å Ä Ö ?
Hello Mats. It should already be doable to use those characters, similar to me using danish characters: Æ Ø Å. Where are you seeing issues? 🙂
The Toast is just showing images with a !-sign
sorry I mean an ?-sign
Hm, can you send me a screenshot on my email: mab@imab.dk? I just, as we speak, created a toast with å ä ö Å Ä Ö as a part of the text, and it displayed just fine. See: https://imab.dk/mab/Swedish.png
Is it possible to determine how long a message is show and how long before a user clicked the action button? Is it possible to capture that into the logs?
Super neat tool
I guess some of that info is already logged by the OS itself in the event log: Microsoft-Windows-PushNotifications-Platform/Operational.
Once my script completes, the OS takes over. Actions taken on the notification itself is logged in above event log, as well as when the notification was shown to the user. Hope that is useful 🙂
Perfecto!
Will there be a way to add hyperlinks within the message? Can the buttons be modified to have it go to a webpage?
The action button can open a web page yes. Windows does not support having hyperlinks inline in the text fields I’m afraid. 🙂
This is a great tool and makes the toast taste better. We have gone through a feature update from 1709 to 1809 and it was painful without user notifications. I was wondering if this tool can be used with Windows Updates and not In-Place task sequences? We found that feature updates are less intrusive but the notifications to the users are poor. Any advice would be greatly received. Cheers
I’m currently deploying the PendingRebootUptime to a collection query based on last boot time more than 7 days.
This ideally works but it’s not 100 % correct as we reuse laptops and therefore they might actually receive the toast as the WQL query can’t look at the uptime. As workaround i’ve made a collection gathering inactive clients and then excluding them from the original collection.
This works but i guess it’s still not 100 % correct.
Is there any way to deploy to prod. where it actually only displays if it has exceeded 7 days uptime?
Hmm, if I get you right, you are relying on the collection and thus hardware inventory. The toast script itself has the ability to look up the computer uptime in real time. Ideally you should simply run the script daily, and if the uptime of the computer – which is being looked up each time the script runs – exceeds the value defined in the config, the toast will display. This is not relying on hardware inventory or any other schedule in the configmgr client.
Isn’t that what you are looking for? 🙂
Wow, feeling bad for missing that one. I somehow missed this function in the XML config, so i never modified it and just thought that you would need to base it on query based device collections. It works like a charm after i corrected it 😀
😀 Sounds good!
Hey, like the toast notification script. In the process of setting it up for my Feature Update deployments. I added some functionality to the 1.6 version. Let me know if you are interested in the code and integrating it.
When a feature update deployment is used with deadline:
* Finds feature update by name, ID, or type (specify in xml).
* Uses the feature update deadline as the “DynamicDeadline”.
* Displays toast based on update Evaluation State (Reboot|Available – Specify in xml)
Hey Paul, I’m very much interested!
Thank you so much for reaching out. This is something I appreciate a lot! Unfortunately the script haven’t made it into GitHub yet, so I would appreciate your changes on an e-mail sent to mab@imab.dk. I hope that’s OK for now, and again, thank you! 🙂
Hey, I like your script. Is there anyway to display the machine name or computer name on the script?
Thanks
Hey, not unless you make your own modifications to the script and make that an option 🙂
I’m working on implementing this myself, as a request from our desk is to make the Password Expiration notice super-duper-in-your-face. Is there a way to make the toast not auto-hide to the Notification tray?
Hi, cudos for the script. it looks great! I am testing the reboot script and it does opens without no issues. However,when the script open and one click on the reboot bottom, this function does not work and the app selector opens asking what app to use to execute the reboot.
Hi, have you either installed the custom protocol.msi that comes with the download or have you created the custom protocols yourself? 🙂
Hey Guys. I tried using the script but it does not reboot the computer. I did try using the two different methods, the reminder and by clicking on the reboot button. Neither of the two options seems to work. Am I missing.
In order to enable the toast script to carry out actions, you need the custom protocols that comes with the download. Have you had a look at them? 🙂
A newbie question.
How to distribute the script through SSCM.
Good morning,
Does anyone know how or where to change the wording under the greeting? I can change the URL but i cant find where to change the wording ‘Software Center’.
Thanks
Hello, you cannot change Software Center. Windows displays that by default, as this is the actual app triggering the notification. This can be changed to Powershell in the config, whereas this will change in the notification as well. 🙂
Thank you for the quick reply, not what i wanted to hear but i understand 🙂
Love this toast notification btw, kudos!
little update which I think would be a nice feature, where you can have a custom image per XML file: –
On the PowerShell add between into the Try statement line 600 (where it gets the XML attributes.
$CustomHeroImage = $Xml.Configuration.Option | Where-Object {$_.Name -like ‘CustomHeroImage’} | Select-Object -ExpandProperty ‘Image’
$HeroImage = “file:///$global:ScriptPath/$CustomHeroImage”
And in the XML file add the following: –
Hi,
Firstly thank you for your work on this.
I am experiencing this same issue. A Software Center Toast pops up stating “New Notification” for a second or two then disappears
What did you mean by “Create a package, which downloads the binaries into the CMcache” ?
I have created a package and enabled “Persist content in the Client Cache” but that didnt resolve the issue, I’ve spent a good few hours trying to understand whats wrong but cant seem to figure out why its not displaying the full notification.
The log file appears to be fine, no issues other than it skips the reg key check “The script will run but toast might not be displayed”
Please can you help as I’m a bit gutted I got this far and I’m stuck at this point!
Thanks again
Just to add, when I set all buttons to False I now get the images and wording in the Notification but it still disappears within a couple of seconds and this also points to what you said about “Create a package, which downloads the binaries into the CMcache” but I am still struggling with how to achieve this. The package is in the CCMCache folder but the folder name will be different for all devices so how would I reference that folder when attempting to run it via the Program/Package?
Ignore all of my comments it was my error configuring the Dismiss button with the Scenario setting, its working now in all its glory.
Just so you know, for me, “long” only seems to be a few seconds with Dismiss button set to False
In my organization the value stored in the backup WMI reg key HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData is in the format Lastname, Firstname. So when local AD wasn’t available the pop up showed “Good morning Lastname,” instead of “Good morning Firstname”. I modified the powershell script with the following to fix this.
Removed:
#$GivenName = $DisplayName.Split()[0].Trim()
Added:
$pos = $DisplayName.IndexOf(“,”)
$GivenName = $name.Substring($pos+1)
Hello Martin,
first of all a big thank you for this tool and for your hard volunteer work for the SCCM community 🙂
I´m trying to use a toast to inform users to update their O365 installation and the action button should trigger an appropriate package for this operation. From what it looks like, the toast notification part goes as planned, packageid is found and written to registry and RunPackageID is ran. But something then goes wrong and the program does not run.
Here´s an anonymized take from the logs:
Toast-Notification Log:
2020-06-10 12.46.17 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-06-10 12.46.17 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-06-10 12.46.17 INFO: Successfully loaded \\FQDN\UpdateNotification\config-toast.xml
2020-06-10 12.46.17 INFO: Loading xml content from \\FQDN\O365UpdateNotification\config-toast.xml into variables
2020-06-10 12.46.19 INFO: Successfully loaded xml content from \\FQDN\O365UpdateNotification\config-toast.xml
2020-06-10 12.46.19 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-06-10 12.46.19 INFO: Running Write-PackageIDRegistry function
2020-06-10 12.46.20 INFO: PackageID: APP0036F was found in WMI as deployed to the client
2020-06-10 12.46.20 INFO: Writing the PackageID to registry
2020-06-10 12.46.20 INFO: Creating the xml for displaying both action button and dismiss button
2020-06-10 12.46.20 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-06-10 12.46.20 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-06-10 12.46.20 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-06-10 12.46.20 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-06-10 12.46.20 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-06-10 12.46.20 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-06-10 12.46.20 INFO: All good. Displaying the toast notification
Execmgr.log
IsTerminalServer: 0, IsSingleUserTS: 1 execmgr 10.6.2020 12.46.23 7336 (0x1CA8)
GetMergedSWDistPolicy – Could not find the policy in WMI for package APP0036F program * execmgr 10.6.2020 12.46.23 7336 (0x1CA8)
No optional policy available for program, error 87d02004 execmgr 10.6.2020 12.46.23 7336 (0x1CA8)
I can run the same program the action button should trigger from the software center correctly. I´ve searched everything I can with the error code from the execmgr.log and implemented the following (cases I found were mostly task sequence related)
– Deployment was first Available, changed to Required with deadline in distant future -> no help
– “Run this application from task sequence without being deployed – checked, no help
Any idea what goes wrong? I also get the same error 0X87d02004 if I try to run you RunPackage.ps1 manually from shell.
Update: I can run programs if I place it in a Task Sequence and trigger the TS through Toast Notification. Sorry if I´ve missed something in your documentations, but is running single packages with “action” not supported?
Hmm, I don’t recall having tested the scenario with single packages. They might need to be triggered differently. The RunPackageID option is initially made for task sequences. Have you considered creating the Office 365 installation as an application instead, and use the RunApplicationID option in the config? 🙂
Thanks for confirming the situation for packages. Converting what I´ve done now to run as package to an application should be possible. Initially I chose package as I did not want to fiddle with detection rules and such, my update just runs O365 setup.exe and then triggers OfficeC2RClient.exe to apply the updated settings.
On a small number of machines the toast notification does not show up. I am using software center and it is running in user context. I am using version 1.5. I have verified that “Notifications” are enabled, but noticed that there is no entry for “Software Center”
Any thoughts? Are there known bugs with notifications on Windows 10 1809? Thanks!!
2020-06-10 13:43:55 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-06-10 13:43:55 INFO: Toast notifications are enabled in Windows
2020-06-10 13:43:55 INFO: No config file set as parameter. Using local config file
2020-06-10 13:43:55 INFO: Successfully loaded C:\WINDOWS\ccmcache\ki\config-toast.xml
2020-06-10 13:43:55 INFO: Loading xml content from C:\WINDOWS\ccmcache\ki\config-toast.xml into variables
2020-06-10 13:43:55 INFO: Successfully loaded xml content from C:\WINDOWS\ccmcache\ki\config-toast.xml
2020-06-10 13:43:55 INFO: DynDeadlineEnabled set to True. Overriding deadline details using date and time from WMI
2020-06-10 13:43:55 INFO: Running Get-DynamicDeadline function. Trying to get task sequence deadline details from WMI and ConfigMgr
2020-06-10 13:44:01 INFO: PackageID of task sequence successfully retrieved. PackageID is: CMP0117F. Now getting deadline date and time
2020-06-10 13:44:01 INFO: Deadline date and time successfully retrieved from WMI. Deadline is: 06/11/2020 07:00:00
2020-06-10 13:44:01 INFO: Greeting with given name selected. Replacing HeaderText
2020-06-10 13:44:01 INFO: Running Get-GivenName function
2020-06-10 13:44:02 INFO: Given name retrieved from Active Directory
2020-06-10 13:44:02 INFO: Creating the xml for displaying both action button and dismiss button
2020-06-10 13:44:02 INFO: Toast notification is used in regards to OS upgrade. Taking running OS build into account
2020-06-10 13:44:02 INFO: All good. Displaying the toast notification
Hey, does the notification show if you switch over using Powershell as the notifying app? I have heard of some instances where notifications are not displaying if using software center, but they were all related to issues on the client (if software center was not properly installed).
Windows 10 1809 shouldn’t have any issues that I’m aware of.
Thanks. I actually switched from Powershell in my pilot group 1 to Software Center in pilot group 2 because we had a few users not getting powershell notifications….I will continue my reasearch!
Right, the user is actually able to disable the notifications separately for software center and powershell. afaik, no why to prevent that from a management perspective. Is this what’s happening?
Hello Martin
thanks for this great tool. I’ve running and issue … I get the toast notification poping up (OS Upgrade) if I select “Instll now” I see flashing the cmd window … and then nothing happens … The TS package ID is informed … The custom tools are already installed … in fact, I checked the registry keys and are informed, and the folder C:\ProgramData\ToastNotificationScript\ Exists … but no log file is created inside … if I run manually the cmd file from there then the TS starts … but Why is not able the Toast to trigger the cmd file ? and why I have no log file created at this location ? The package is deployed OK and is deployed under user context. I’m able to see the Toast …
Thanks in advance
The log file should be in appdata\ToastNotificationScript and not in ProgramData. Any clues in there? If the TS is triggered by running the .cmd manually, running the .cmd from the Install button should be the exact same behavior. What value is registered in the registry here: Computer\HKEY_CLASSES_ROOT\ToastRunPackageID\shell\open\command? It should point to the .cmd file.
Hi Martin,
Thanks for this awesome script!
I already use it for AD Password Expiration and OS-Upgrade. (FYI. for all my ToastNotification scripts I use your 1.5 version, including the .msi file)
Due to Covid-19, my company wanted a “pop-up” remembering people to wash hands.
Therefor i decided to create another ToastNotification program. I decided to use the .xml file called config-toast.xml.
The script/packages works, and the ToastNotification works.
But there is a “small” problem. Because in the .xml file I have only enabled the Action button, where I changed the value to “OK”.
But when people press “OK”, the messages just move to the Action Center. Then you have to open Action Center and press OK again or press the cross.
I believe this happens because there is no “Action” attached to the Action button.
Is there a way to avoid this?
Here is a selection of my .xml file:
Hey Michael, how about not enabling the action button, but only the dismiss button and rename that to OK? 🙂
Hey Michael,
I thought I already tested that, but apparently not..
I have just made that change and it works like a charm.
Thank you 🙂
*Martin of course, my bad 🙂
Probably some amateur-error, but having trouble on initiating PendingRebootUptime -toast.
After enabling:
log:
2020-06-12 14.54.37 INFO: Toast notification is used in regards to pending reboot. Uptime count is greater than -6
2020-06-12 14.54.37 INFO: All good. Displaying the toast notification
result:
empty, generic toast
SOFTWARE CENTER
NEW TOAST NOTIFICATION
Doing this by local powershell-console, as logged-on-user.
What am i missing?
I believe something’s amiss in the config. Does it work when running the script directly from the download without modifying anything? The toast itself can act up if you put too much text in there.
Hi Martin,
I love the toast notification, but am wondering if there is an easy way to use it to notify users when there is anything available or required in the software centers? We seem to have low install percentages for available software and until the deadline for required. It would be nice to have something more in a users face than the default balloon popup.
Thanks!
Hey Martin,
I´ve ran into an issue with the new Version of your script. I think with the 1.6 Version, it is no longer possible to run a package.
I tried to figure out how the whole thing works an from what i undestand it is like this(for osupgrade): The Toastscript checks if its package or application, promts user, starts something(this is the part I dont understand and i guess here is the error – I only know it needs the the reg key in the classes_root), there the .cmd is written down, the cmd starts the ps1 which then starts the Softwarecenter with some sort of COM-command.
I ran the Toast script with Application and it works (though i got some errors with the application starting the Task Sequence in the filed-test so I wanted to simplify it and just run the Task Sequence)
I then changed the .xml to run the package ID, the Logs confirm that the Toast now looks for the package ID and that RunapplicationID is not selceted. But still, it runs the application. After some troubleshooting I just changed the “RunApplicationID” Reg Key entry to run the “RunPackageID.cmd” out of curiosity. And, indeed, this “fixed” the issue.
So in short: Even though “RunPackageID” is selected, it still runs the “RunApplicationID” Reg Key entry.
Greetings, Phil
Greetings! I’m not sure I completely follow, but the action taken on the script is managed via the action attribute, and not from enabling either features. Are you remembering to be switching between ToastRunPackageID and ToastRunApplicationID as an action? 🙂
Hello, Wanted to see if you seen an issue where when clicking on the Install option in Toast, the action target app shows “Unknown” status for the application in Software Center so users arent able to install the app because the “Install” option for the app in software center is greyed out. We have tried with diff SoftwareIDs in SoftwareCenter and all apps get the same behavior. The toast works great, but when Toast takes them to software center, they are unable to install, thanks
I just replied on your twitter mention 🙂
Hi Martin, wanted to see if you knew of any workarounds to get it to not show unknown, i sent you a screenshot of our xml file. Please let me know if you see anything off, thanks for your help
I’m sorry for the very late reply. Vacation mode is on. Did you manage to solve this? So this behavior would also be true, if you simply shared the URL/link to the application via email? So when clicking the link, the app would also have an unknown status?
Hello,
I would like to know if it’s possible: before starting the task sequence there are some conditions for example check the disk space and if it’s too full it suggests to delete some content…
Do you have a proposal to do this?
Thanks
I have something similar explained in a previous blog post where I’m sharing my IPU task sequences. Search for that on the blog 🙂
Hello Martin,
great script. Could you tell me please, is that possible to display the computer name too?
Regards
Love the notification! Came back to get the updates and I don’t see the O365 variables any more? Is that no longer supported?
Hey Mark, I’m not sure which O365 variables you are referring to?
So great setup! I have one question how do you get the notification screen to show up with A install button and snooze timer? I can get reboot and dismiss but not install and snooze? In your example it shows all the buttons plus snooze timers? any help please
If you want a snooze button, enable the snooze button in the config xml. The name of the action button (install, reboot etc.) is also configured in the config xml 🙂
how can i trigger the toast notification from task scheduler?
I have an example of that included in the documentation 🙂
Hi Martin
Great Script. I just start testing i our enviroment. We are not using SCCM but Toast Notification would be a great help anyway.
Just wondering – why are the xml files the same in version 1.8. Im talking about the notification text. All the xml files contains the text from rebootpending.xml.
Hey Torben, that is just my copy/paste lazyness. This should only be true for the danish and swedish languages. I figured that one would do their own text anyways and replace mine. It’s the configurations of the individual features that’s relevant 🙂
I am an SCCM noob but I am trying to implement this toast notification through SCCM. I get the “Script is being run as SYSTEM” Warning and I can not figure out how to get passed this issue. Can you provide any insight? The package is placed in ccmcache and tries to execute from there.
On the program of the package, on the environment tab, make sure it’s configured to run with user’s rights and only when a user is logged on.
You are a superhero! Thank you so much for the help. This worked swimmingly.
Awesome! 🙂
Hello,
Great script got it working perfectly. I’m using it for notifying users to not touch a PC that is currently installing programs in the background. Is there a way to have the notification stay on the screen indefinitely until a user hits the dismiss button. Thanks.
Hi Martin,
This is an absolutely fantastic solution, one I wish Microsoft would implement into SCCM for notifications!
I have been using it for a while now and it works great 🙂 I use it to prompt users to restart if required (from uptime or software/patch installation).
One thing I found, and sharing it in case its helpful, is when Focus Assist is turned ON in Windows, the Toast Notifications wont appear on screen, they go straight to the notification center, which is normal behavior. This can be on because the users turned it on, or in alot of cases gets turned on automatically when in video conference meetings etc.
I found I could get around this by changing the Toast Scenario from ‘reminder’ to ‘alarm’ in the config xml
” ”
This makes the toast push through focus assist (in any of its states), and still seems to behave as a reminder in that it stays on screen until dismissed. However as it is an alarm, by default it also sounds an audible alert, whatever the default alarm tone is set to on windows 10. I didn’t want this in my scenario. So to make it silent I had to add a line to the XML config sections in the New-ToastNotification.ps1 file as below.
https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/toast-schema#toastaudio it can enable/disable the audio for the toast, or apparently change what’s played – although I couldn’t get that to work in testing.
Anyway, hope this is helpful, and keep up the fantastic work!
Hmmmm ok some of the lines didn’t come through, apologies.
Changing to alarm was meant to have the line from the config xml –
Option Name=”Scenario” Type=”alarm” Possible values are: reminder | short | long
and the line in the ps1 xml sections to make it silent was ” audio silent=”true” ”
/binding
/visual
audio silent=”true”/
actions
Well that is indeed useful! Thank you for sharing that with me! 🙂
Hello Andrew, can yoy explain this litt more….. what/why do you change audio silent=”true” En where is this in the .xml ? I do not see it….
Hello All,
Getting a strange error when running the script
“you’ll need a new app to open this toastrunapplid”
the strange thing is that i don’t get the error but a couple users do. i ran the script manually on the machine, and the popup works, but when you click install the error pops up. the user( doesn’t work) and i (working) are in the same collection and have the app published to the same collection.
anyone seen this before?
This is the action on the action button. On some of my examples in the config.xml files, this is set to ToastRunAppID:. This is a custom protocol I made in Windows manually. You would need to make something similar, if you want the action button to do specific things. What do you want the action button to do in your scenario? 🙂
Hello,
I am a beginner and I have a problem. I would like to directly launch another powershell script from the action button
I modified this in the file : config-toast.xml
Should we do it another way?
Thank you for your reply
Hey, what exactly did you modify in the config file? 🙂
oh sorry I forgot the example :
When I press the button I would like it to execute the second script
Seems like something is being stripped away from your comment. Can you send me whatever issues you have on email? mab@imab.dk 🙂
if you would like the users custom profile picture to display instead of the ToastLogoImage.jpg
Original
# Setting image variables
$LogoImage = “file:///$global:ScriptPath/ToastLogoImage.jpg”
Replacement
#Find Users Current ProfilePicture
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$CurrentUser = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current
$SID = $CurrentUser.Sid.Value
$FindPicture = Get-Childitem -Path C:\Users\Public\AccountPictures\$SID -Include *-Image192.jpg -Recurse -Force
$ProfilePicture = $FindPicture.Name
Copy-Item “$env:systemDrive\Users\Public\AccountPictures\$SID\$ProfilePicture” -Destination “$global:ScriptPath\UserPic.jpg” -Force -PassThru
$unhide = get-item “$global:ScriptPath\UserPic.jpg” -Force
$unhide.Attributes=”normal”
# Setting image variables
if (Test-Path $global:ScriptPath/UserPic.jpg) {
$LogoImage = “file:///$global:ScriptPath/UserPic.jpg”
} else {
$LogoImage = “file:///$global:ScriptPath/ToastLogoImage.jpg”
}
Hi,
Although the scenario is selected as reminder (in official document, it says “The notification will stay on screen until the user dismisses it or takes action. On Windows Mobile, the toast will also show pre-expanded. A reminder sound will be played”.),
notification disappears after 5 minutes, i think that maximum run time for a notification is 5 minutes.
can you confirm if the working principle is like that?
Thanks.
Yeah, I can confirm that. I’m not sure if this is ‘as designed’, but something surely seem to have changed within the OS. 5 minutes is what I’m getting as well.
Toast message get disappear when I click on image or on toast message body.
Where I can found msi for reboot?
The toast notification is being dismissed if clicked on. That’s the behavior in the OS. Not something I can change I’m afraid.
The custom protocol for enabling the toast notification to reboot the computer is now built into the script. See my very latest post: https://www.imab.dk/windows-10-toast-notification-script-update-run-configmgr-software-updates-directly-from-the-action-button/
Hi Martin,
Is there a way to run custom action or protocol when clicking on image or toast message body ? I don’t want a dismiss action.
Toast notifications from Outlook allow that to open new email for example.
Thanks.
Hello Guys,
I am really impressed with this Toast notification. but i have some queries to run this on my environment. I need to do the package deployment for end users with this toast notification. I created a Task sequence in this case and inserted the Package ID in the config.xml file. but still its failing and i am not getting pop up on the machine. Any help?
Hi, can you paste the relevant content of the log file: AppData\Roaming\ToastNotificationScript\New-ToastNotification.log
I dont see the logs in the path
I dont see any logs files also when i run it from SCCM software centre.
So the script is never run properly. I have read your email, and the script should not be run from within a task sequence. A task sequence is running in SYSTEM context unless you actively make an effort in invoking the current user’s context. I recommend that you use a package/program as suggested in the documentation 🙂
Ok.. I was able to create package and push to the machine and i got the pop up to install also. But when i click on “Install now” its bring the “You’ll need a new app to open this link” searching for app. In the xml file, I provided the package ID and still its not working. Any help please?
Did you enable the CreateCustomScriptsAndProtocols option in the config.xml? If you want the toast notification to carry out custom actions, you will need scripts located in: ProgramData\ToastNotificationScript. Do you have that? Also, please paste the content of the log file located in AppData\Roaming\ToastNotificationScript
Here is the log file.
2020-08-28 09:08:13 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 09:08:13 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 09:08:13 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 09:08:13 INFO: Successfully loaded C:\Users\nxa07227-a\Desktop\Package deployment\config-toast_Packageinstallation.xml
2020-08-28 09:08:13 INFO: Loading xml content from C:\Users\nxa07227-a\Desktop\Package deployment\config-toast_Packageinstallation.xml into variables
2020-08-28 09:08:13 INFO: Successfully loaded xml content from C:\Users\nxa07227-a\Desktop\Package deployment\config-toast_Packageinstallation.xml
2020-08-28 09:08:13 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 09:08:13 INFO: Running Write-PackageIDRegistry function
2020-08-28 09:08:13 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 09:08:13 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 09:08:13 INFO: Running Get-GivenName function
2020-08-28 09:08:14 INFO: Given name retrieved from Active Directory
2020-08-28 09:08:14 INFO: Creating the xml for no dismiss button
2020-08-28 09:08:14 INFO: Creating the xml for snooze button
2020-08-28 09:08:14 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 09:08:14 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 09:08:14 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 09:08:14 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 09:08:14 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 09:08:14 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 09:08:14 INFO: All good. Toast notification was displayed
2020-08-28 09:18:44 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 09:18:44 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 09:18:44 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 09:18:44 INFO: Successfully loaded C:\Users\nxa07227-a\Desktop\Package deployment\config-toast_Packageinstallation.xml
2020-08-28 09:18:44 INFO: Loading xml content from C:\Users\nxa07227-a\Desktop\Package deployment\config-toast_Packageinstallation.xml into variables
2020-08-28 09:18:45 INFO: Successfully loaded xml content from C:\Users\nxa07227-a\Desktop\Package deployment\config-toast_Packageinstallation.xml
2020-08-28 09:18:45 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 09:18:45 INFO: Running Write-PackageIDRegistry function
2020-08-28 09:18:45 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 09:18:45 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 09:18:45 INFO: Running Get-GivenName function
2020-08-28 09:18:46 INFO: Given name retrieved from Active Directory
2020-08-28 09:18:46 INFO: Creating the xml for no dismiss button
2020-08-28 09:18:46 INFO: Creating the xml for snooze button
2020-08-28 09:18:46 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 09:18:46 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 09:18:46 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 09:18:46 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 09:18:46 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 09:18:46 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 09:18:46 INFO: All good. Toast notification was displayed
2020-08-28 10:31:05 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 10:31:05 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 10:31:05 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 10:31:05 INFO: Successfully loaded C:\Windows\ccmcache\5\config-toast_Packageinstallation.xml
2020-08-28 10:31:05 INFO: Loading xml content from C:\Windows\ccmcache\5\config-toast_Packageinstallation.xml into variables
2020-08-28 10:31:05 INFO: Successfully loaded xml content from C:\Windows\ccmcache\5\config-toast_Packageinstallation.xml
2020-08-28 10:31:05 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 10:31:05 INFO: Running Write-PackageIDRegistry function
2020-08-28 10:31:05 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 10:31:05 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 10:31:06 INFO: Running Get-GivenName function
2020-08-28 10:31:06 INFO: Given name retrieved from Active Directory
2020-08-28 10:31:06 INFO: Creating the xml for no dismiss button
2020-08-28 10:31:06 INFO: Creating the xml for snooze button
2020-08-28 10:31:06 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 10:31:06 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 10:31:06 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 10:31:06 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 10:31:06 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 10:31:06 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 10:31:07 INFO: All good. Toast notification was displayed
2020-08-28 10:54:31 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 10:54:31 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 10:54:31 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 10:54:31 INFO: Successfully loaded C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 10:54:31 INFO: Loading xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml into variables
2020-08-28 10:54:31 INFO: Successfully loaded xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 10:54:31 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 10:54:31 INFO: Running Write-PackageIDRegistry function
2020-08-28 10:54:32 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 10:54:32 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 10:54:32 INFO: Running Get-GivenName function
2020-08-28 10:54:32 INFO: Given name retrieved from Active Directory
2020-08-28 10:54:32 INFO: Creating the xml for no dismiss button
2020-08-28 10:54:32 INFO: Creating the xml for snooze button
2020-08-28 10:54:32 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 10:54:32 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 10:54:32 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 10:54:32 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 10:54:32 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 10:54:32 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 10:54:33 INFO: All good. Toast notification was displayed
2020-08-28 10:57:05 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 10:57:06 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 10:57:06 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 10:57:06 INFO: Successfully loaded C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 10:57:06 INFO: Loading xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml into variables
2020-08-28 10:57:06 INFO: Successfully loaded xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 10:57:06 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 10:57:06 INFO: Running Write-PackageIDRegistry function
2020-08-28 10:57:06 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 10:57:06 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 10:57:06 INFO: Running Get-GivenName function
2020-08-28 10:57:07 INFO: Given name retrieved from Active Directory
2020-08-28 10:57:07 INFO: Creating the xml for no dismiss button
2020-08-28 10:57:07 INFO: Creating the xml for snooze button
2020-08-28 10:57:07 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 10:57:07 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 10:57:07 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 10:57:07 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 10:57:07 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 10:57:07 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 10:57:07 INFO: All good. Toast notification was displayed
2020-08-28 11:05:34 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 11:05:34 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 11:05:34 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 11:05:34 INFO: Successfully loaded C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:05:34 INFO: Loading xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml into variables
2020-08-28 11:05:34 INFO: Successfully loaded xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:05:34 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 11:05:34 INFO: Running Write-PackageIDRegistry function
2020-08-28 11:05:34 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 11:05:34 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 11:05:34 INFO: Running Get-GivenName function
2020-08-28 11:05:35 INFO: Given name retrieved from Active Directory
2020-08-28 11:05:35 INFO: Creating the xml for no dismiss button
2020-08-28 11:05:35 INFO: Creating the xml for snooze button
2020-08-28 11:05:35 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 11:05:35 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 11:05:35 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 11:05:35 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 11:05:35 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 11:05:35 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 11:05:35 INFO: All good. Toast notification was displayed
2020-08-28 11:07:30 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 11:07:30 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 11:07:30 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 11:07:30 INFO: Successfully loaded C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:07:30 INFO: Loading xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml into variables
2020-08-28 11:07:31 INFO: Successfully loaded xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:07:31 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 11:07:31 INFO: Running Write-PackageIDRegistry function
2020-08-28 11:07:31 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 11:07:31 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 11:07:31 INFO: Running Get-GivenName function
2020-08-28 11:07:32 INFO: Given name retrieved from Active Directory
2020-08-28 11:07:32 INFO: Creating the xml for no dismiss button
2020-08-28 11:07:32 INFO: Creating the xml for snooze button
2020-08-28 11:07:32 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 11:07:32 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 11:07:32 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 11:07:32 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 11:07:32 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 11:07:32 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 11:07:32 INFO: All good. Toast notification was displayed
2020-08-28 11:11:10 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 11:11:10 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 11:11:10 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 11:11:10 INFO: Successfully loaded C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:11:10 INFO: Loading xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml into variables
2020-08-28 11:11:11 INFO: Successfully loaded xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:11:11 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 11:11:11 INFO: Running Write-PackageIDRegistry function
2020-08-28 11:11:11 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 11:11:11 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 11:11:11 INFO: Running Get-GivenName function
2020-08-28 11:11:12 INFO: Given name retrieved from Active Directory
2020-08-28 11:11:12 INFO: Creating the xml for no dismiss button
2020-08-28 11:11:12 INFO: Creating the xml for snooze button
2020-08-28 11:11:12 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 11:11:12 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 11:11:12 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 11:11:12 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 11:11:12 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 11:11:12 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 11:11:12 INFO: All good. Toast notification was displayed
2020-08-28 11:18:34 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 11:18:34 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 11:18:34 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 11:18:34 INFO: Successfully loaded C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:18:34 INFO: Loading xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml into variables
2020-08-28 11:18:35 INFO: Successfully loaded xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:18:35 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 11:18:35 INFO: Running Write-PackageIDRegistry function
2020-08-28 11:18:35 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 11:18:35 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 11:18:35 INFO: Running Get-GivenName function
2020-08-28 11:18:36 INFO: Given name retrieved from Active Directory
2020-08-28 11:18:36 INFO: Creating the xml for no dismiss button
2020-08-28 11:18:36 INFO: Creating the xml for snooze button
2020-08-28 11:18:36 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 11:18:36 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 11:18:36 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 11:18:36 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 11:18:36 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 11:18:36 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 11:18:36 INFO: All good. Toast notification was displayed
2020-08-28 11:19:04 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 11:19:04 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 11:19:04 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 11:19:04 INFO: Successfully loaded C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:19:04 INFO: Loading xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml into variables
2020-08-28 11:19:04 INFO: Successfully loaded xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:19:04 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 11:19:04 INFO: Running Write-PackageIDRegistry function
2020-08-28 11:19:04 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 11:19:04 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 11:19:04 INFO: Running Get-GivenName function
2020-08-28 11:19:05 INFO: Given name retrieved from Active Directory
2020-08-28 11:19:05 INFO: Creating the xml for no dismiss button
2020-08-28 11:19:05 INFO: Creating the xml for snooze button
2020-08-28 11:19:05 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 11:19:05 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 11:19:05 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 11:19:05 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 11:19:05 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 11:19:05 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 11:19:05 INFO: All good. Toast notification was displayed
2020-08-28 11:23:03 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-08-28 11:23:03 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-08-28 11:23:03 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-08-28 11:23:03 INFO: Successfully loaded C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:23:03 INFO: Loading xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml into variables
2020-08-28 11:23:03 INFO: Successfully loaded xml content from C:\Windows\ccmcache\6\config-toast_Packageinstallation.xml
2020-08-28 11:23:03 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2020-08-28 11:23:03 INFO: Running Write-PackageIDRegistry function
2020-08-28 11:23:04 WARNING: PackageID: PS1004E3 was not found in WMI as deployed to the client. Please check the config.xml or deployment in ConfigMgr
2020-08-28 11:23:04 INFO: Greeting with given name selected. Replacing HeaderText
2020-08-28 11:23:04 INFO: Running Get-GivenName function
2020-08-28 11:23:04 INFO: Given name retrieved from Active Directory
2020-08-28 11:23:04 INFO: Creating the xml for no dismiss button
2020-08-28 11:23:04 INFO: Creating the xml for snooze button
2020-08-28 11:23:04 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2020-08-28 11:23:04 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2020-08-28 11:23:04 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2020-08-28 11:23:04 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2020-08-28 11:23:04 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2020-08-28 11:23:04 INFO: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying default toast
2020-08-28 11:23:05 INFO: All good. Toast notification was displayed
Will you be able to provide the step by step instruction if possible please?
1. We need to install the Windows 10 Toast Notification script custome Action protocol in all user machine first
2. then need to create customscriptsandprotocols option in config.xml whenever we do the package depoyment?
3. Do we need to update the runpackageId with package id everytime?
I enabled this option also
Have you got the latest version of the script?
According to the log, you have not enabled CreateCustomScriptsAndProtocols in the config file. This is required if you want the action button to run the package directly. Also, the package comes out as not deployed to the device. The package should be visible from the Software Center. If this is deployed as required, you need to tick ON ‘Allow the users to run the program independently of assignments’ in User experience tab of the deployment.
I dont find this log in the machine
Hi Martin. Thank you for posting this notification solution. This is exactly what I’ve been looking for to use with our current Windows 10 upgrade initiative. One question I have on it… while running this on some test VM’s, I’ve noticed every once in awhile scclient will stop responding. When I look in event logs, it looks like it’s related to .Net. Are you aware if there is a specific .Net requirement for the toast notifications? Other than that I receive the pop up just fine and it looks great. Thank you!
Hi, sounds strange. I’m simply launching the software center with some allowed and supported parameters, nothing fancy. As if you would launch software center from a command prompt or with a shortcut. No special requirements 🙂
is there a way for the to make a custom action button that could open network and connections setting or open available wireless networks.?
Hey, I don’t think you need a custom action for that. Have you tried running this from run: ms-settings:network-wifisettings
You can put that into the action button without creating anything custom 🙂
Hi All, anyone tried base64 encoding the image files stead of reading from disk? Reason I ask is I’m having an issue where the toast images are not show in the toast notification sometimes, but other times the images show up. I think it might be an issue were users do not have rights to read image file path from the c:\windows\ccmcache\… So I’ve encoded the images but having some challenges getting it to work, because I’m still a noob with powershell. How can I do this using the existing ps1?
I tried base64 encoding of the images and I didn’t like it. The script is getting huge. fyi, you can host the images online as well. The script accept images coming from a http or https URL.
Hi. I’m trying to work with the toast notification, but when I execute the script, it shows me a generic toast notification stating either Powershell or Software Center “New Notification” and doesn’t actually show me the toast modal. Any thoughts on fixing that?
Have you made any changes to the config? Which config are you loading? What does the log file say (appdata\toastnotification)
I get the same. but it seems to be when I run it from a network share. \\doamin\netlogon\new-toastnotification.ps1 -config \\domain\netlogon\Config-Toast-rebootpending.xml. Message is just small window that says Software Center.
If I copy the script local with the config in the network share it works normally: c:\new-toastnotification.ps1 -config \\domain\netlogon\Config-Toast-rebootpending.xml give me the full popup with buttons.
No changes to any of the files.
Yep, I’m not completely sure why, but that haven never worked. The config may reside on a network share, but the script is supposed to be stored locally. Either by ConfigMgr in the cmcache or somewhere else 🙂
I only need the reboot functionality, is there any way for me to have the restart function work on clicking the action button without having to install the .msi?
Yes, see my latest version (2.0.x). This version doesn’t require you installing anything, but creates the protocols for you.
Interesting.
With version 2.0 I downloaded from github to my machine and ran it. Everything worked fine, but when I tried to deploy through SCCM to another machine it still doesn’t work. I get the same result as I would on a machine that doesn’t have the .msi installed. Any idea why this might be?
UPDATE:
It seems the scripts aren’t getting put into the AppData\ToastNotificationScript\Scripts folder when I deploy through SCCM. What could be the cause of this?
Sounds like you are not running this as the logged on user, but as with administrative rights? This is something you need to fix on the program in the environment tab in configmgr.
I’m also seeing this same thing. I updated my Program’s Environment to Run Mode – “Run with user’s rights” and still get the same results.
Are you certain that, that change in the program now is reflected in the current policy on the client? What version of the script are you using? Can you paste the relevant content of the log file? For good measures, I just re-tested everything coming from configmgr running with user’s rights, and everything is populated nicely into appdata\roaming\toastnotificationscript. (version 2.0.2 of the script)
I’m sure it’s something on my end. Here are the logs –
2020-09-11 09:26:06 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2020-09-11 09:26:06 INFO: The registry key for determining if toast notifications are enabled does not exist. The script will run, but toasts might not be displayed
2020-09-11 09:26:06 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2020-09-11 09:26:06 ERROR: No config file found on the specified location [locally or fileshare]
Could it be an issue with the way I’m deploying the package?
On Deployment options –
“Download content from distribution point and run locally” or should I select “Run program from DP” ?
How are you specifying the config.xml file if any? Where is your config.xml located? The script accepts the parameter -config, that accepts both UNC paths as well as files hosted online (http or https). If no config file is set via the parameter, the script assumes that a config file is stored next to the new-toastnotification.ps1 file. 🙂
I’m using the 2.0.2 Script…this is the script I’m running in the package. That package is point to a file location with the required files.
powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\New-ToastNotification.ps1 -Config “\\Server\SourceFiles\Toast_Notifications\ToastNotificationScript2.0.2\config-toastpendingreboot.xml”
So maybe my cmd line is wrong?
Does the user running the script have access to that location? The cmdline seems OK, the script just doesn’t get to read the config file and that’s where your troubles are. Can you verify that there’s access to the path and that the config.xml indeed is located there?
First, wanted to say thanks for the help Martin!!
I had the config file named wrong in my cmdfile – “config-toastpendingreboot.xml”
Should’ve been “config-toast-rebootpending.xml”…guess my brain has already moved onto the weekend.
Thanks again! Awesome tool!
Thank you! 🙂
Hi there,
Love this script. Wondering if there are options for:
– Prevent user clicking on the body of the toast which will hide the toast box into action center.
– Count down timer for OS upgrade
Do you have an update in progress for maybe a generic message sender? I’d like to send a system notification, like planned maintenance is about to start? I can kind of hack up the XML file to make it do something similar but if you have something planned, that would be cool.
If you are referring to use the script to send out general notifications, you can do that by simply turning off all the features in the xml. If you do that, the notification will work like that. The message configured in the xml will be sent out to the devices.
Nick kind of hijacked my questions so I’m going to continue on a new thread here because we are not having the same issue and the reply option is gone on the original post.
My config file is read perfectly fine, it displays whatever I type in the text portion and it does what I ask. My program is run at the user level and not the admin level. My problem is that the script will create the ToastNotificationScript file in %appdata% but it wont put any scripts inside the folder so when I click the “Restart Now” button there is no script to be run. The way I’m implementing this is by SCCM copying the entire folder onto the user machine using robocopy and then running the script locally.
Thanks again for all the hard work!
Can I get you to check the registry in HKCU\Software\ToastNotificationScript and the value of the ScriptAndProtocols registry entry? Scripts and protocols are only created if the value of said registry entry is less than the script version. I do this to only create stuff if really needed. Though if the registry entry got created in your end, but not the scripts, running the script again will not make a difference, as long as the registry key is there. Also, can I get you to paste the relevant content of the log file?
Hey Korey, sorry about. Now that I look at it my Scripts folder is also empty. My registry value is 2.0.2
2020-09-11 11:41:27 INFO: Script version: 2.0.2 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols
Delete the registry entry and rerun the script. 🙂
That worked!
Martin,
I’m not really sure why, but this morning I started working on it and it just decided to play nice. Everything is working properly at the moment. I am happy that it works, a little uneasy because I don’t know the exact problem I was having, but I’ll just monitor it closely and if I discover anything I’ll try to post it here for anyone else to see.
Your work and dedication to this script is awesome!
Thanks a bunch!
Thanks! Don’t hesitate to reach out. I’m very keen on getting rid of any bugs I might have introduced. I can only do so much testing myself and I’m usually blind in that regard.
Hi Martin,
Awesome Stuff !! Thanks for Sharing.
I tried this in my environment and it works like charm for one Software update. But since we have multiple software updates (available in Software Centre) as a part of our monthly patching. Is it possible to run multiple updates using “Install All” button in Software Centre via this Toast notification ?
Or it is possible open Updates page in software Centre when user action on Install\Update now?
Thanks
Hi Rachna,
You can send the user’s into the Software Center on the Updates page using this as an action: SoftwareCenter:Page=Updates
The script is currently not able to enumerate through multiple software updates and install them all. The built in feature to install software updates is mainly targeted for Feature Updates, where there obviously just will be one. 🙂
Question about the HeroImage. I added my own image for the ToastLogo and it works but the hero image doesn’t show on my notification. I have the jpg image in the Images folder and referenced correctly in the xml. I have also resized the Hero image to the same size as the ToastHerImageDefault and that didn’t work either.
Hmm, not sure what to advice. Are you able to share the image with me so I can have a go in my end? I’m not doing anything magically regarding the images, other than just reference them when constructing the actual toast. If not an issue, send me the image at mab@imab.dk and I’ll be happy to have a look.
Hi Martin,
Just a curious question, will there be a way to count how many times user clicks the action or dismiss button on the Toast ? Just to get some idea of user usage / behaviour when toast pop-ups. I know that there’s a task sequence you can run after user clicks the action button but I need that button do something else. What I was thinking is to just have a variable somewhere to keep on increasing the count when a user clicks the action button. Will there be a way?
-Joan
Hi Joan, I’m not aware of anything out of the box. It would be easy to implement when using the action button, as you can script anything you like here on top of the actual desired action. As to when interacting with the toast notification in general, there are some information logged into the event log here: Microsoft-Windows-PushNotifications-Platform/Operationa
This is great, it does exactly what we want it to do, but I only have one question. I am using osupgrade xml with feature updates specifically 2004, how do i get it so that when i click install it initiates the install from software center?
Thank you. Read this: https://www.imab.dk/windows-10-toast-notification-script-update-run-configmgr-software-updates-directly-from-the-action-button/ 🙂
Great Script. I wanted to write for others that might run in a use case where you need to enter a URL protocol that has special characters in it.
I just figured out how to add ServiceNow KB Article to the toast notification!!!!
It was a stupid find, but for someone that knows enough XML to get buy I am happy. I have no one to share this with so you have to read.
The problem is the URL for opening an incident from ITNow or Opening an KB article, there is an & in the URL. That is a special character and needs to be escaped as &
https://xxx.service-now.com/itnow?id=kb_article&sysparm_article=KB0011111
which works when done manually, and when the XML file is read into a variable as
https://xxxx.service-now.com/itnow?id=kb_article&sysparm_article=KB0011111
However, that variable is read into another XML file that needs the & escaped. The fix is to escape the & twice.
https://xxx.service-now.com/itnow?id=kb_article&sysparm_article=KB0011111
I am embarrassed on how long that took me to figure out.
Dawn
Thank you Dawn, for sharing that. I do think that someone somewhere in the comments section had the need to include ‘&’ in some of the text, and was required to escape the character with the same technique 🙂
Thanks Martin for the coolest work. I’m one among many who enjoys this coolest thing.
Sorry to write on old one but I’m into the same situation. Your writing was helpful to me. But when i modified the url to match(1) below, I’m missing the “Learn More” button itself. 🙁
1. https://www.xxx.service-now.com/GSP?id=xxx_kb_article&&sysparm_article=KB0015431
2. https://xxx.service-now.com/GSP?id=xxx_kb_article&sysparm_article=KB0015431
Side Note: 1 works manually but 2 shows error as “Knowledge record not found”.
Hello
Some of my machines are not running the script. I noticed in SCCM it states Message ID 10006. Error 1. There are windows 10 1709 or 1809. Can’t figure out why some work and other do not. Nothing in the App discovery or App enforce jump out
execmgr.log will be the correct log, assuming your are running the script with a package/program. AppDiscovery/AppEnforce are for applications. Error 1 could be me terminating the script for various reasons. Take a peek at the toastnoficiation.log in appdata\toastnotificationscript. What does it say?
execmgr : Script for Package:WC2005C4, Program: ADpassword expired failed with exit code 1, Toast notification log has not updated for over a month. that is how I found out about 1/3 of the machines were not executing.
What’s your commandline for running the script? Does it work when run outside of ConfigMgr?
Your script is fantastic. Got it working in SCCM but when I downloaded the package 2.0.2 I can’t see the msi to enable a reboot. You mention above that it’s not necessary with this version, can you tell me what value I should have here to force a reboot?
Also I’ve found for Windows Feature Updates a “normal” reboot won’t start the upgrade, it has to be started with “update and reboot” from the Start Menu, is there anyway of duplicating this functionality.
Correct, the script in version 2.0.2 has an option in the XML which is called CreateCustomScriptsAndProtocols. If this is enabled, the script will create protocols in registry and scripts here: AppData\Roaming\ToastNotificationScript\Scripts.
The protocol in Windows which enables you to initiate a reboot from the toast action is ToastReoot, but obviously requires that the scripts and protocols are created by the toast script itself:
This is looking really fantastic and will definitely implement in our organization. All features are superb, just got a question:
Our current Windows 10 upgrade notification is checking for the required packages downloaded in ccmcache prior notifying the user for the upgrade.
Could you please suggest how can we add such configurations in the toast-notification upgrade script?
Many thanks in advance!
So all dependencies of the task seqeuence needs to exist by their package id in the ccmcache. That’s not something the script currently can do, but this would be something you could do with collections if precaching content. So once content successfully has precached, you could do a design where the device moves into another collection, where the toast notification is deployed.
Hello
Thank you for responding. It does not seem to execute when I run the command line outside of sccm. I know it works in sccm since I see the logs updating from the previous day when they run around 9am. So some machine it works others it does not.
powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\New-ToastNotification.ps1 -Config “\\server2012\sources\packages\Windows 10 config\Notification-toast\toast-rebootpending.xml”
Hello, so if trying to run the script locally on one of the affected devices, nothing happens? In either case, something must be reported, either in the log file (if the script manages to pass that point) or directly in the powershell console. What details can you share with me? 🙂
Hi,
Is there a way to enable notification for PowerShell if a user disable that? as I don’t see an option in the script to check for that other than just Notification in general.
So if I show a notification to user and they hover on the notification, they can select turn off notification for PowerShell and that get disable, I find the registry for it in the HKCU but deleting it doesn’t seems to work and only take affect if you toggle the switch in the actually notification settings.
Thanks.
Yes, issue is that, that setting is stored in AppData\Local\Microsoft\Windows\Notifications\wpndatabase.db.
If a notification hasn’t been sent (since the user disabled it), there’s maybe a (of course not supported) way: stop the service WpnUserService, delete/rename the wpndatabase.db file, delete the regkey “HKCU:Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Powershell” and restart the service again – a new db file is created and afterwards the notification can be sent successfully. Disadvantage of course: most of the notification settings are lost. Basically the old/renamed db file could be written back to get the settings back.
That would be a pain, cause I have to check for that registry and if it’s exist do those steps to re-create that file and then run it again.
Is there a way to block the user from disabling notification for PowerShell so it shows up all the time?
Is it possible to block the user to touch any of the Notification Settings and gray out the option for them?
Hi Martin,
First of all – thanks for creating this tool, easy to use, easy to change, for people with very few Powershell knowledge.
However, if I try to use the reboot option, I can see that it’s showing a dropdown button to snooze, but I don’t see the Snooze, reboot action keys.
I’m using the latest version 2.0.2.
I have read through the comments already but did not see this noticed before.
So what have I done so far:
created an application with 2 files in there:
– the config-toast-rebootpending.xml file
– the New-ToastNotification.ps1
and the images
the code for the reboot is this.
Am I missing something here?
Your computer is required to restart due to having exceeded the maximum allowed uptime.
Reason: Pending reboots was found in registry or WMI.
Your password will expire on:
Hey you – wake up. Your computer needs to restart. Do it now.
Restart now
Dismiss
Snooze
Company name
The IT Organisation kindly reminds you…
Your computer needs a restart!
For security and stability reasons, we kindly ask you to restart your computer as soon as possible.
Restarting your computer on a regular basis ensures a secure and stable Windows. Thank you in advance.
Click snooze to be reminded again in:
Your deadline is:
Good morning
Good afternoon
Good evening
Minutes
Hour
Hours
Computer uptime:
days
Thanks!
Hey, it’s the extra text from the rebootuptimetext option paired with the snooze option, which makes the toast not render properly. I’m preventing that combination in the next version. Either disable snooze or disable rebootuptimetext 🙂
Thanks for the info and the fast reply! changed it and now I’m able to snooze.
One more question if I may: is there a possibility to force a reboot after a specific amount of time?
Only if you script it yourself somewhere. It’s not something my script currently can do 🙂
You can do another custom action and protocol, that instead of just firing shutdown /r /r 0, you can change it to something else 🙂
Martin – This is absolutely fantastic, thank you for sharing! Here’s my scenario and what’s working in my lab..
1.) Running the Toast Notification application scenario, I wrapped script into PSADT using the following:
Execute-Process -Path “powershell.exe” -Parameters “-executionpolicy bypass -WindowStyle Hidden -File `”$dirFiles\New-ToastNotification.ps1`” -Config `”\\server\share\public\ToastNotification\config-toast.xml`””
2.) In SCCM, the program only runs when a user is logged, run mode is set to Run with user’s rights, and program set to always rerun. I use the command line, Deploy-Application.exe Install Noninteractive.
3.) Toast notification appears and now trying to test the three scenarios, Install Now, Snooze, Dismiss. Not sure what I should be expecting based on how my SCCM program is set to always rerun.
Hey, the rerun behavior in configmgr doesn’t interact with the buttons in the toast notification. Dismiss will dismiss the current toast notification, period. Snooze will tell the OS to snooze the toast notification for the specified duration. The OS will then display the toast notification once again. The action button will have the action you specify in the config.xml.
The rerun behavior will simply rerun your PSADT app again, which will run the toast notification. What’s the reason behind wrapping it into PSADT? 🙂
Hi Martin, great work! thanks.
When running Snooze, where is this written to?
I am deploying a Feature Update via an application. the Toast is set to run every 4 HRS (always rerun), And also setting it to run ASAP. However setting it to run ASAP it will run but as the application isnt yet present in SW center it wont run with a notification to the user.
Once the machine has the application (feature Update), over two days a user can get duplicate notifications even after snoozing as a previous notification was snoozed.
Right, when using snooze, you tell the OS to display the toast notification again after the snooze duration, while the rerun behavior in configmgr will do the same. I don’t have a way to prevent that. Personally I don’t recommend using the snooze option, if you also have a rerun behavior in configmgr that rerun the toast that often. 🙂
Hello,
I’m just updated to the latest version of the script and now for some reason I cant get any of the images to show up for the toast notification. Everything else works perfectly fine besides that. I was using version 1.8.0 of the script before and the logo and hero images showed up fine. I’m not sure if anything changed or the images need to be put a specific folder. I left the images in the Images folder like they are by default and checked the config file to make sure the file name was correct for each picture.
Thanks,
Kyle
That’s weird. Does any of the built in images work for you? Does the images show up, if you don’t change any of the configuration in the .xml and simply run the script as it comes from the download, and only replace the images as the only change?
So the weird thing is the bultin pictures do not show up but if I change the file name to something else and edit the config xml to reflect the change, they show up just fine. Not sure why. At least I was able to get it working that way. Either way, thanks for the script. Truly awesome :).
I’m curious. What was the original file name of the images when they didn’t work? And thank you! 🙂
Is there a easy way to replace all SCCM notifications with this? for all new app pushes it looks like you have to hardcode the package ID.
No, I’m afraid not. The original idea here is, that this is something you add to a deployment when needed 🙂
I am in the process of testing this for use with Feature Updates. I have both English and German language computers. Would I need to configuration files with different RunUpdateTitle?
Hi Martin,
Great script!.
How can I get the “Install Now” and “Snooze” action buttons only?
Editing the xml file “DismissButtion” value to “False” doesn’t work with Snooze enabled.
The problem is the “Dismiss” button exits the toast notification ever to return.
If not possible, then how can the Dismiss button be hidden?
Thanks Tim
Thanks Tim.
The script is currently designed in way, where enabling the snooze option, always enables the action and dismiss button, so there’s no option for you within the config file, you will have to modify the actual script to do that 🙂
Hi Martin,
Awesome script!
I’m not great with .xml but can I add a website link for users to click on in the notification?
Also we have computers with French OS, will it automatically translate when deployed to the OS?
Thanks,
Kyle
You can specify a website to open in the action button in the .xml. If you want everything to be in French, you need to add an FR language paragraph, similar to the ones I have added for danish and swedish in the config examples I included.
Hi Martin,
Would that be in the config-toast.xml or New-ToastNotification.ps1 ?
Everything in the config.xml 🙂
Thanks, I got it to work! Awesome and thank you for responding so quickly as well.
I’m doing the translation now.
My pleasure 🙂
Hi Martin,
1. Is there a character limit ?
2. Just below where is says good morning, it says “Software Center”, is there a way to change it to something else?
There might be a character limit. You will know once the toast notification starts to render without buttons and such.
Software Center is because I use Software Center as the app initiating the toast. It must be something, it can’t be nothing. The alternative is using Powershell. That’s something you can change in the config.xml as well (UseSoftwareCenter or UsePowershell).
Hi Martin,
Thanks again.
Is it possible to turn off the ability to click or double click the notification and it disappears?
I’m afraid not. That behavior is native to Windows 🙂
Hi Martin,
Thanks for all your help so far.
Is there a way to format the information I place in the config.xml? To make it easier to read? Neater?
Hi Martin,
1. Is it possible to format with etc?
2. Is it possible to have a 5 second countdown before the buttons are active to click?
I’m afraid not. No formatting options and not option to delay things 🙂
Hi Martin,
I’m back.
Question, I’ve asked to find out if the notification can only display when people login and not on the lock screen.
Yes, there’s a group policy available which can prevent toast notification to display on the lock screen.
Hi Martin,
I read this statement below and wanted to know if you mean I should be going to the “Data Access” tab in the properties of the package and check off “Copy the content in this package to a package share on distribution points”?
___________________________________________
The entire toast notification is configurable through the config-toast.xml. The idea here is, that the purpose of the toast notification can be modified without the need to push new files and/or update distribution points in ConfigMgr.
Hi,
No, what I mean is, that the purpose of the toast notification is something you manage via the config.xml, and the config.xml doesn’t have to be a part of the package in ConfigMgr. So if you decide to change the wording or enable another feature, this is solely done in the config.xml file and the script and package needs no edits. 🙂
Oh okay I have a deployment that has the entire package sitting on computers including the config.xml at this time. So I’ve been updating all the DPs. So I edit the config.xml with the change on the PS and then update all the DPs.
Should I redo the entire package without the config.xml in the package?
Your decision 🙂 It’s alright to keep the xml within the package and update DPs as you describe. I just prefer not to. 🙂
I Prefer your method just want to make sure I do it right.
So I only create a package with the script only?
Yeah, and leave the config files on a file share or upload them somewhere reachable via http(s). I do the latter now, as I don’t what to be dependent on an onprem fileshare. I upload them to blob storage in azure, and reference them via the -config parameter 🙂
Hey Martin, and thanks for the awesome script.
My question might be a bit odd after having read all the comments here, but I wonder if there is a possibility to scale down the size of the notification?
I mean I WANT it to be intrusive, so the users get notified (running it as a reminder to restart their computer), but some people thint it’s very big. Especially with the heroimage on top of the actual message.
I’m guessing it has to do with the templates provided by Microsoft, but I can’t get my head around if there are other templates than “ToastGeneric” to use, and if there are, what they might be called.. 🙂
Any tips around this?
Many thanks in advance
Hey, right. That would require that the script is modified directly. Perhaps that would be something to incorporate into the config.xml some time in the future. The section where the XML for the toast is put to together needs to be modified. You could remove the hero image: https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/adaptive-interactive-toasts?tabs=builder-syntax
No I would like to keep the image there. I’m just looking to see if it’s possible to scale the whole toast down slightly. 🙂
Not to my knowledge. This is the first time I get that request. I haven’t seen anything about scaling in the official docs. You can get a brief look into what’s possible with the design from this app: https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/notifications-visualizer
Thanks. No real scaling, but at least I figured out how to make it look a bit different 😉
I’m looking to use this in my organization as a reminder for the users to restart their computers, but I would like to see a function to let the user only to have the choice to dismiss it a number of times, and after that the script would just show a countdown and then restart automaticly.
As you probably know, users are rebels, and they tend not to always do what you want.. 😉
I gotcha! The toast notification, due to it’s nature and security is not capable of doing anything automatically I’m afraid. All the custom actions, doing something with configmgr deployments is a kinda of a hack in itself 🙂
Hi Martin,
Once again, thank you for these amazing scripts. Just wanted to ask you, how can i make users to open outlook when they click on the action button defined?
Hey Martin, first of all I would like to say that you have built a very useful tool! Thanks for that.
I have the following problem:
I use the script for notifying users to install an application. I defined the AppId in the xml as described in documentation.
The script is scheduled to run at every Login and 9 o’clock every day. My problem is that the notification is also displayed if the application is already installed. Do you have a solution for me? I won’t showing the notification if the software is already installed.
Thanks!
Hey, make use of the collections here. Deploy the toast notification script to a collection of devices which doesn’t have said application installed already. Then once the applications gets installed, the devices moves out of the collection and is no longer getting the toast notification. This requires that you run hardware inventory daily, if you run the toast notification daily.
Sorry if this was already asked but, is there a way to set a time before the notification is automatically dismissed? I am using it as a reboot reminder and after a weekend or night with the users session locked they will come back having to dismiss 10+ notifications to make it go away. Appreciate any help you can provide.
Hmm, let me think about this one.
This usually happens because ConfigMgr has run the program again and again over det weekend. How about not scheduling the script to run during the weekend?
The toasts are being queued in the action center, and once the first is dismissed, the OS displays the next in line. For now, this seem like an unintended benefit of the behavior with a recurrent schedule and the toast script. 10 toast over the course of a weekend do however seem a bit aggressive.
You can say, that confimgr and the script simply does what you tells it to do. A toast notification is displayed for each time the script is run with configmgr. I will see if I somehow can avoid this. Let me know what you think about this 🙂
Hi Martin,
Excellent script.
I tried to use the script, I have updated CreateScriptsAndProtocols as true.
When i try to execute the script its working fine also I could see .cmd and psi file is creating. but when i click on “Install Now” Nothing is happending.
Could you please help.
What do you have configured as an action for your action button in the config.xml?
In action option -> value is ToastRunPackageID:
Is there any change to display message box or to call any function.
What do you expect to be happening when clicking the action button? What features within the config.xml do you use? Run task sequence, run application or run package? 🙂 And are any of these deployed to the device?
Also, paste the entire content of the C:\Users\mab\AppData\Roaming\ToastNotificationScript\New-ToastNotification.log file when answered above questions. 🙂
Hi Martin, I had an interesting case where the users machine was off for the past 6 days while he was out of the office over the holiday. When he booted the machine this morning he got the Restart Reminder saying his machine has been up for 25 days. The config file is set to 5 days. The New-ToastNotification.log from this morning reflects the current uptime as 25 days.
I have the notification deployed with ConfigMgr. I verified that the machine was off in the event logs.
I’m wondering if this is a timing issue between the PS script running and the ConfigMgr client starting up.
Thoughts?
Hi,
Scripts are disabled for normal users in our organisation. Is there any way around this by using different permissions etc?
Thanks
First, thanks for the time you’ve spent creating an awesome tool. I can’t tell you how many of my customers integrate this into their MECM worlds to elevate their user experience.
On to my thought/question…I was asked by a customer about scheduling a daily task to proactively monitor for when new updates are available and present a toast notifying them of that and having the action button launch Software Center on the updates page and initiate the install of all updates prior to the deadline. Currently, at least as far as I can tell, all the logic around updates focuses on an individual update, which of course requires monthly modifications to address them individually.
I’m not sure if this is something others would find valuable enough to include it in the tool, but in case they would, I’ve written the primary additions needed (staying consistent with the existing scripting approach you’ve taken) to read an additional XML value, query for updates that would be ‘available’, and added the custom registry entries and custom script language for the action button and would like to contribute. I’m still working on the scenario logic that the script currently checks for to find conflicts, but that’s coming. How would I go about sending what I’ve added for you to consider?
Comments like yours makes it all worth it. Thank you so much for sharing that with me, and in regards to your contribution to the script, you are more than welcome to send over what you have to my email: mab@imab.dk
Again, thank you so much! 🙂
i run the command : .\New-ToastNotification.ps1 -Config .\config-toast-adpwexpiration.xml but kept getting this
WARNING: This will always enable both action buttons and the dismiss button
WARNING: Replacing any previous formatting of the toast xml
WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
WARNING: Conditions for displaying default toast notification are not fulfilled
you left out some of the important parts of the log file, saying something about if you have a password expiring within the defined period. If your password is not expiring, the toast will not display 🙂
Hi Martin,
great script. Is there possible to display the computer name?
Regards
Hi, I’m afraid not. That’s not something I have built into the script.
Kudos for the work done here “Windows 10 Toast Notification Script”
im using the script for os upgrade – when i press the action button to trigger the process runnning the ts
I get a cmd prompt shortly showing the cmd file created by Write-CustomActionScript i think
should this cmd not be hidden? or maybe put @echo off so the code executed in the bat/cmd is hidden from the userr
and again nice work.
In the nature of cmd being a console application, it cannot be hidden without calling cmd from something like a .vbs script. I did initially consider it, but again, you are clicking and initiating an action, and a short cmd prompt doesn’t bother me much. I’d understand if you’re running something silent for the user, but in this case, the user are aware of an action being initiated.
Perhaps in the future, I’ll rewrite the custom actions to be initiated silently.
Thank you 🙂
did some modification so fit my need line:983
Now i only get the cmd box without path to the ps1 file maybe add echo “Running Action…”
[String]$Script = @”
@echo off
powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File `”$global:CustomScriptsPath\ToastRunPackageID.ps1`”
“@
#”powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File `”$global:CustomScriptsPath\ToastRunPackageID.ps1`””
Working with the reboot notifications. Some users are getting the following error when the hit RestartNow:
You’ll need a new app to open the toastreboot
Any ideas? And can we get the system to log what happens when the buttons are hit?
Do the users have any content in this folder: C:\Users\Martin\AppData\Roaming\ToastNotificationScript\Scripts
What version of the script is being used?
What if configured as action in the config.xml?
In registry for those users, try to delete this registry entry: Computer\HKEY_CURRENT_USER\Software\ToastNotificationScript\CustomScriptandProtocols and rerun the script. Does the action button work?
Sorry for very late reply. I am still in testing, so very few users to work with.
+ Verified that the affected user does not have any content in the Scripts folder.
+ Running v2.0.2
+ I am running 2 deployments with different config files. One for check pending reboot and one for time since last reboot. It is working from SCCM on some machines, not others.
+ There is nothing in HKEY_CURRENT_USER\Software\ToastNotificationScript. I had the user delete the ToastNotificationScript key, but that did not have any affect when it was reran.
+ The action button does not work. It gets the error I mentioned.
Additionally, I found that none of these keys are getting created:
• HKEY_CURRENT_USER\Software\Classes\ToastReboot
• HKEY_CURRENT_USER\Software\Classes\ToastRunApplicationID
• HKEY_CURRENT_USER\Software\Classes\ToastRunPackageID
• HKEY_CURRENT_USER\Software\Classes\ToastRunUpdateID
Hmm, does it work when running the script manually on those devices? What if you take my latest version 2.1.0. Does that make a difference?
Hey there,
I have created my own script for a toast notification. I was trying to find a way to re enable toast notifications if it was disabled by the user. Your script does that with the pushnotification registry key. But here is the problem, if I follow the way you do it even after restarting the WpnUserService, the toast notification will not show up. Does it have to do with the windows version (2009) that I am using?
I am having the same issue. Except I have the audio part turned on, so that still works but the toast message doesn’t pop up. The only way I have found to fix that is to manually toggle the notifications off and on. There has to be something else we can do to force the toast messages to reactivate and pop up.
Bringing in the 2.1 version from 1.6, as there’s some grumbling about the password expiration piece still coming up after the password has expired (and they claim they rebooted). Seems there was a change to direct file paths for images, as was pointing to a logo file (C:\ProgramData\CompanyAssets\logo.bmp), and that no longer works.
Still a great tool, we’ve had a lot of positive feedback, even if users grumble “do I have to change my password now?”
In the instructions, It says to input the UNC path for the XML file if stored remotely. I cannot for the life of me figure out where to insert the UNC path for the xml files in the PowerShell script.
You set your UNC path with the paramter -Config. You don’t need to edit the powershell script at any point:-)
Hi Martin,
When using the notification script with the RunApplicationID parameter, does it check the installation state of the application before displaying the notification? Like if the app is already installed, it doesn’t display the notification.
Hey Michael, you shared this suggestion on GitHub as well. Currently it does not check if the app is actuall installed, though it checks if it’s deployed to the device. Appreciate the suggestions – thank you 🙂
Hi Martin,
Did I really shared this suggestion? I don’t even remember. Well, I guess I will try to exercise my memory a bit more before asking new questions. 😅
And if I find some time for that, I will work on adding this feature and make a PR once it’s ready.
Hi,
is there any news on implementing this feature?
This would be really helpfull in avoiding useless pop-ups and improving the customer experience.
regards
I need the same functionality so I did this really quick workaround. Add this from line 660:
try {
$TestApplicationIDState = (Get-CimInstance -ClassName CCM_Application -Namespace root\ccm\clientsdk | Where-Object {$_.Id -eq $RunApplicationIDValue}).InstallState
}
catch {
Write-Log -Level Error -Message “Failed to retrieve $RunApplicationIDValue InstallState from WMI”
}
#If Application ID State is installed then exit
if ($TestApplicationIDState = ‘Installed’) {
Write-Log -Level Error -Message “Script will exit here. Application is already installed”
Exit 1111
}
did not test too much, use at your own risk 🙂
Trying to add a html link into the body but I am having some difficulty in getting it to show. Any ideas please?
Thanks
I don’t think that’s possible. The body text itself cannot be interactive and the only actions lies within the action buttons I’m afraid.
Great work,
Two suggestions:
– to show notification under system account serviceui.exe (Part of mdt) could be used I think
– add support for multiple sccm app installation (if I run second notification for installing another app, registry key with app ID will be replaced right? So the first notification “stops” working. So maybe add some ID param to store settings and custom actions in different location
Hei Martin,
Thanks for the script, nice work!
One question, I get : waring : conditions for displaying toast notifications for upgradeOS are not fulfilled.
How can I see whats the problem her, everything seems to be inplace…..
Mvh John
What OS build are you moving from and to? And is are you using the toast notification with a Windows upgrade? 🙂
that is 19041 (which is TagetOS)
Yes,Toast and UpgradeOS is true.
oja, upgradding to 19042
So your TargetOS should be configured to 19042 if that’s what’s you’re upgrading to 🙂 If the running the toast on a 19042, with the uprgadeOS option enabled, the toast notification will not display.
ahh, yes…that did the trick….didn´t see that one… Thanks!
Hei again Martin,
Is it also possible to run a OS update ?
When I add the packages ID from the TaskSequens (which available is in the programvarsenter), nothing is happening.
I’m missing something here as well ?
The whole point for the toast notification action, is to run a task sequence directly. What action have you defined in the actionbutton option?
Hello Martin,
Forget my last question. The script folder i the roaming catalog was empty.
Regards
John
Have you tried running this manually as yourself, with the user you are logged on to windows. Are the folder in appdata created then? When you create the program/package in configmgr, you need to make sure the program is running with user’s rights in the user’s context
hi
i want to put a snooze timer on the reboot but cant seem to find a way around this , is this possible?
You can enable a snooze option on the toast notification itself, but if the user clicks Reboot now on the action button, the script behind reboots immediately.
Hey Martin
I implemented one of your earlier versions of the toast notification script and i installed ‘windows 10 toast notification script custom actions’. is this particular application still required to utilise custom protocols or can it be now removed?
Hello, it can now be removed if you use the new option: CreateCustomScriptsAndProtocols in the config.xml 🙂
Hello, I’m testing script locally and it works perfectly.
After creating a package/program in SCCM (user context with all the suggestion given) i can see throug SCCM log files that the exit code is 0, but unfortunately nothing is displayed and no TostNotification.log is created.
Can you please help me? I’m struggling with this for hours!!
I would need some more details from you I believe. I exit the script with 0 if the script is run as SYSTEM, or the config is not available and a few other places.
Hello Martin!
Thanks for this awesome script, I have been using it a lot to install feature updates in organisations.
I was wondering if it would be possible to make a function for the pending reboot actionbutton that installs updates then shuts down the computer when it is finished? I don’t think that the cmd command shutdown /s installs any pending updates?
Thanks for the awesome work!
HI, I was just wondering what I am missing how do I deploy this to devices via sccm. As when I run it in PowerShell no toast message appears.
Would really appreciate an idiot guide which runs through how to deploy test etc
What happens when you run New-ToastNotification.ps1 directly from the download on GitHub? If you do so from a powershell prompt, it would log to the screen for you to see what’s happening exactly. That’s the first place to start in troubleshooting this.
Hi Again,
This is a really great script, and thank you again for all the work.
I had posted awhile back about the notification showing the wrong amount of uptime. I’ve had a couple users who boot the machine up, and it shows a huge number of uptime in days. Today a machine showed being up for 63 days after the boot up.
Where is this pulling the uptime from? And how could it be so far off?
Any help would be appreciated.
Wow, never heard that before. The uptime is retrieved from WMI: (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
It then takes the current date (Get-Date) and substracts that from the uptime: Current date – LastBootUptime.
Perhaps it helps if I use system date formats here. It will use your regional settings to display the date and time for the current date and uptime. Not sure if that can cause any issues if using specific regional settings.
I does seem really weird. It has occurred on 3 different machines out of about 1800 that this has been deployed to. I was thinking possibly the WMI could be corrupt? Since it has not happened on more machines. Is there some testing I could do that may isolate the issue?
I would test it manually on the device running that portion of my script which calculates the uptime. Is it persistent? Something rotten must be going on, on those devices.
Hello Martin,
i have question about the burnttoast notification. must the powershell module installed on every devices or can we just deployed from config manager ? kind of regards, Osman
This is not the burnt toast module, so no, that module is not needed on each device. 🙂
Hi
We have deployed the latest version toast and works fine. If the toast triggers and is ignored with no user interaction and no action buttons used, the toast times out after 10 minutes and disappears. It does not appear in the Win 10 notifications area. It appears it will never trigger again.
We have set snooze option and that works fine. We have scheduled the deployment via SCCM to rerun at 930A daily if the user dismisses but that also seems to not trigger again.
Is there a setting that will trigger the toast again if the user ignores and/or dismisses the toast? It would be preferable to configure the toast program rather than running the program on schedule.
Thank you.
The snooze option should tell the OS (read this is entirely taken care of by windows itself) to re-display the notification. Other than that, a recurring schedule is needed in order to have the toast to be displayed again if needed. Remember the rerun behavior in configmgr needs to be Always rerun. All of these timings are outside of the scope of the script I’m afraid. This is something the OS does. I just trigger a notification, the rest is left to the OS. 🙂
Hi,
We have created a package as you explained in the documentation but we got an error (exit code 1 in the execmgr, 0x1(1) in Software center).
This package is configured to run as user rights and the xml file is downloaded together with the ps1, so all the files are in ccmcache.
If I open a powershell with the same user rights, navigate to that folder and run the same command line, it works well.
“powershell.exe -ExecutionPolicy Bypass -File .\New-ToastNotification.ps1 -Config .\config-toast-osupgrade.xml”
Additionally, If I’m logon with an admin account, it works fine using software center.
It’s pretty weird since I can execute it manually with the same user rights… what else should we check? any thoughts? It seems something is blocking when I’m using SC.
I’ve tried to search for that folder in programdata as someone else reported here before, but in my case, I don’t have it. This folder always is created in appdata as expected.
Also, no logs are created when it fails in Software Center.
Thank you.
How does your program cmdline looks like? If you keep the .xml wihtin your package, try to rename that to just config-toast.xml and avoid using the -parameter option. Otherwise, use the -parameter option but point to a UNC or online location.
Hi Martin,
Thank you, it works by running the ps1 directly without any -parameter option.
Firstly I used the cmdline as you suggested: “powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden-File .\New-ToastNotification.ps1 -Config myfile.xml” but I got that 0x1(1) error.
Later I tried to run the powershell directly by using only “New-ToastNotification.ps1 -Config myfile.xml” but I got an error “arguments in original command line .\new toast… doesnt’ match associated command line “C:\windows\syswow64\windowspowershell\v1.0\powershell.exe” -NoLogo -NonInteractive -ExecutionPolicy Bypass” %1″
Using that one (running ps1 directly) in an application has worked fine but you cannot re-schedule to run every day. I thought to put a detection method to find 20H2 version and let the application deployment cycle to run it every day since the package will fail and will retry the next day… but I would rather to set that program schedule.
Anyway, finally I used a package without parameters or forcing to use powershell, only executing the ps1 and now it works (it uses the default config-toast.xml as you said).
I think the root cause in our case was some AV policy because when we open a powershell we got a warning due a constrained mode and I recalled we had other issues in the past.
Thank you
Great to hear that it now works. Thank you! 🙂
Can you show me how your command looks like. I’m facing the same issue here
Hello Together, i deployed the Toast Notification as a Package and the TaskSequence with a Deadline to the same Collection. I already reinstalled the SCCM Client on the Device but i do get the Following Error in the LOG: Failed to get deadline date and time from WMI, Please check if there really is a deadline configured, The script is continuing, but the toast is displayed without deadline date and time. The Deadline is visible in Software Center.
The Full Log File:
2021-02-16 09:09:12 INFO: ToastNotificationScript registry path not found. Creating it: HKCU:\SOFTWARE\ToastNotificationScript
2021-02-16 09:09:12 INFO: CustomScriptPath not found. Creating it: C:\Users\User\AppData\Roaming\ToastNotificationScript\Scripts
2021-02-16 09:09:12 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2021-02-16 09:09:12 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2021-02-16 09:09:12 INFO: Successfully loaded \\XXX\config-toast_1809.xml
2021-02-16 09:09:12 INFO: Loading xml content from \\XXX\config-toast_1809.xml into variables
2021-02-16 09:09:12 INFO: MultiLanguageSupport set to True. Current language culture is de-CH. Checking for language support
2021-02-16 09:09:12 INFO: Support for the users language culture found, localizing text using de-CH
2021-02-16 09:09:13 INFO: Successfully loaded xml content from \\XXX\config-toast_1809.xml
2021-02-16 09:09:13 INFO: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
2021-02-16 09:09:13 INFO: Registry value of ScriptsAndProtocolsVersion does not match Script version: 2.1.0
2021-02-16 09:09:13 INFO: Creating scripts and protocols for the logged on user
2021-02-16 09:09:13 INFO: Running Write-CustomActionRegistry function: ToastReboot
2021-02-16 09:09:13 INFO: Running Write-CustomActionRegistry function: ToastRunApplicationID
2021-02-16 09:09:13 INFO: Running Write-CustomActionRegistry function: ToastRunPackageID
2021-02-16 09:09:13 INFO: Running Write-CustomActionRegistry function: ToastRunUpdateID
2021-02-16 09:09:13 INFO: Running Write-CustomActionScript function: ToastReboot
2021-02-16 09:09:13 INFO: Running Write-CustomActionScript function: ToastRunApplicationID
2021-02-16 09:09:13 INFO: Running Write-CustomActionScript function: ToastRunPackageID
2021-02-16 09:09:13 INFO: Running Write-CustomActionScript function: ToastRunUpdateID
2021-02-16 09:09:13 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2021-02-16 09:09:13 INFO: Running Write-PackageIDRegistry function
2021-02-16 09:09:15 INFO: PackageID: XXX was found in WMI as deployed to the client
2021-02-16 09:09:15 INFO: Writing the PackageID to registry
2021-02-16 09:09:15 INFO: DynDeadlineEnabled set to True. Overriding deadline details using date and time from WMI
2021-02-16 09:09:15 INFO: Running Get-DynamicDeadline function. Trying to get deadline details from WMI and ConfigMgr
2021-02-16 09:09:15 INFO: RunPackageIDEnabled is True. Trying to get deadline information based on package id
2021-02-16 09:09:17 INFO: PackageID retrieved. PackageID is: XXX. Now getting deadline date and time
2021-02-16 09:09:17 ERROR: Failed to get deadline date and time from WMI
2021-02-16 09:09:18 ERROR: Please check if there really is a deadline configured
2021-02-16 09:09:18 ERROR: The script is continuing, but the toast is displayed without deadline date and time
2021-02-16 09:09:18 INFO: Greeting with given name selected. Replacing HeaderText
2021-02-16 09:09:18 INFO: Greeting with Guten Morgen
2021-02-16 09:09:18 INFO: Running Get-GivenName function
2021-02-16 09:09:19 INFO: Given name retrieved from Active Directory: XXX
2021-02-16 09:09:19 INFO: Creating the xml for no dismiss button
2021-02-16 09:09:19 INFO: Creating the xml for snooze button
2021-02-16 09:09:19 WARNING: This will always enable the action button as well as the dismiss button
2021-02-16 09:09:19 WARNING: Replacing any previous formatting of the toast xml
2021-02-16 09:09:19 INFO: Toast notification is used in regards to OS upgrade. Taking running OS build into account
2021-02-16 09:09:19 INFO: All good. Toast notification was displayed
2021-02-16 09:23:24 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2021-02-16 09:23:24 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2021-02-16 09:23:24 INFO: Successfully loaded \\XXX\config-toast_1809.xml
2021-02-16 09:23:24 INFO: Loading xml content from \\XXX\config-toast_1809.xml into variables
2021-02-16 09:23:24 INFO: MultiLanguageSupport set to True. Current language culture is de-CH. Checking for language support
2021-02-16 09:23:24 INFO: Support for the users language culture found, localizing text using de-CH
2021-02-16 09:23:24 INFO: Successfully loaded xml content from \\XXX\config-toast_1809.xml
2021-02-16 09:23:24 INFO: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
2021-02-16 09:23:24 INFO: Script version: 2.1.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols
2021-02-16 09:23:24 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2021-02-16 09:23:24 INFO: Running Write-PackageIDRegistry function
2021-02-16 09:23:25 INFO: PackageID: XXX was found in WMI as deployed to the client
2021-02-16 09:23:25 INFO: Writing the PackageID to registry
2021-02-16 09:23:25 INFO: DynDeadlineEnabled set to True. Overriding deadline details using date and time from WMI
2021-02-16 09:23:25 INFO: Running Get-DynamicDeadline function. Trying to get deadline details from WMI and ConfigMgr
2021-02-16 09:23:26 INFO: RunPackageIDEnabled is True. Trying to get deadline information based on package id
2021-02-16 09:23:27 INFO: PackageID retrieved. PackageID is: XXX. Now getting deadline date and time
2021-02-16 09:23:27 ERROR: Failed to get deadline date and time from WMI
2021-02-16 09:23:27 ERROR: Please check if there really is a deadline configured
2021-02-16 09:23:27 ERROR: The script is continuing, but the toast is displayed without deadline date and time
2021-02-16 09:23:27 INFO: Greeting with given name selected. Replacing HeaderText
2021-02-16 09:23:27 INFO: Greeting with Guten Morgen
2021-02-16 09:23:27 INFO: Running Get-GivenName function
2021-02-16 09:23:27 INFO: Given name retrieved from Active Directory: XXXX
2021-02-16 09:23:27 INFO: Creating the xml for no dismiss button
2021-02-16 09:23:27 INFO: Creating the xml for snooze button
2021-02-16 09:23:27 WARNING: This will always enable the action button as well as the dismiss button
2021-02-16 09:23:27 WARNING: Replacing any previous formatting of the toast xml
2021-02-16 09:23:27 INFO: Toast notification is used in regards to OS upgrade. Taking running OS build into account
2021-02-16 09:23:27 INFO: All good. Toast notification was displayed
See my latest reply. The deadline is grabbed from WMI as the user via Get-CimInstance -Namespace root\ccm\clientsdk -Query “SELECT * FROM CCM_Program where PackageID = ‘packageid'”. If this is run manually on the device, do you then see a deadline configured?
So I am seeing the same issue that PackageID was not found in WMI as deployed to the client. But I am seeing the Win10 IPU task sequence in the software center. I have verified the PackageID. When I run that command above, it doesn’t find it. Is something wrong with WMI? Is there a way to fix this?
Hello Together,
i found that the dynamic Deadline in the Toastnotification Script for an InPlace Task Sequence ist not working if in the Properties of an InPlace Task Sequence under Advanced: “Suppress task sequence notifications” is set or enabled. I do wan’t to use the Notification Tool instead of any Task Sequence Notifications. In the Log the following Error is reported: Failed to get deadline date and time from WMI, Please check if there really is a deadline configured, The script is continuing, but the toast is displayed without deadline date and time. If “Suppress task sequence notifications” is disabled it works very well and displays the dynamic Deadline. Does anyone have an idea how to fix this error?
Best regards,
snoogarp
Hm, the toast notification grabs what it’s able to retrieve from WMI as the user. I believe this will require that the task sequence is visible in the SC and ‘allow the user to run the program independently of assignments’ enabled on the experience tab of the deployment of the TS (suppressing notifications shouldnt matter in this case)
Hi, thanks for the great script!
Just wanted to ask, is there a reason I shouldn’t amend the code so that I can have 3 buttons:
(1)Action 1 – install package, (2) Snooze and (3) Learn More – MS Edge to webpage
I’m using your script for an OS Upgrade and ideally wanted our users to install now, snooze – to install later, or Learn More taking them to an intranet page about relevant information.
Obviously, your script prevents 2 actions and snooze being enabled at the same time, so I’ve managed to amend the ps1 to work for what I need by commenting out this small bit of error-handling. But before I start using it with our users thought I would ask the question?
Thanks again.
Nah, that shouldn’t cause any issues. I just didn’t like not having a dismiss button and snooze in my opinion is not that useful. If you want 2 action buttons and a snooze button, you can do that 🙂
Great, Thanks Martin.
Good morning @ all.
First of all, very nice Tool!
I have 2 Questions:
1. I created the Package and a program. I deployed the program to a device group within SCCM. Run Mode “Run with user’s rights”, only when a user is logged on. Advanced Setting “Run once for every user who logs on”
Test result was negative, no notification when users log in.
2. I tried to test the script directly with powershell. -> .\New-ToastNotification.ps1 -Config .\config-toast.xml
Script is working, but i do not see the notification layout wich you posted above. I only see a small popup Notification like Softwarecenter New Notification.
Thanks for your Support
Hi Martin,
Not sure if I’m missing something, I’ve downloaded 2.1.0 version and all the config files are not in English.
Do you have English version by any chance?
Say what? The config files includes english as well as danish and swedish text option, but everything else is in english. 🙂
Sorry Martin,
Stupid question, please ignore.
Hey Guys,
i was able to get the script to run! Works perfectly and I’m thrilled! Now, my question is whether it would be possible to define a prerequisite before the script is executed. For other information, whether the IP is reachable by the DC. The background is that I would like to run the script at Logon, but many users are currently @ Home and haven’t set up a VPN immediately when logging in. Thus, the script fails because no DC is reachable. Or do you have a better idea to define a planned task? Thank you in advance
hi Martin,
we are using your script for some months now and it is working great.
i have only a question , your script counts the days that one pc is not rebooted.
if the user shutdown the pc every day, after the specified days in the script the notification appears asking the user to reboot.
is this normal or i missed some settings?
thank you
Hi, I’m getting the last boot time from WMI: Get-CimInstance Win32_OperatingSystem. If this somehow is not reset on shut down (I cannot imagine how and why), the script will still count uptime and display the notification. You will need to do some troubleshooting here and look in WMI on the device where this behavior is reported 🙂
hi Martin,
we are using your script for some months now and it is working great.
i have only a question , your script counts the days that one pc is not rebooted.
if the user shutdown the pc every day, after the specified days in the script the notification appears asking the user to reboot.
is this normal or i missed some settings?
thank you
Hi, I’m getting the last boot time from WMI: Get-CimInstance Win32_OperatingSystem. If this somehow is not reset on shut down (I cannot imagine how and why), the script will still count uptime and display the notification. You will need to do some troubleshooting here and look in WMI on the device where this behavior is reported 🙂
Thanks Martin,
indeed it was a problem with the WMI. i have rebuild the WMI repository and now it seems to work normally.
Hi Martin,
I’m working on configuring your script to work in our domain environment for reboots related to Windows Updates.
I have it working for the most part. Currently I’m creating a scheduled task per the guide to run hidden, however it’s still popping up a command prompt window as it begins. It wasn’t at first, now it is. Not sure what I’ve done? Any ideas?
Additionally, I’ve created a GPO that copies the files and creates the scheduled task to run as SYSTEM. Unfortunately, since the changes a couple of years ago that removed the ability to set a dynamic user for the runas of a scheduled task, I’ve had to create a second scheduled task that runs(as SYSTEM): schtasks /change /tn UpdateToastNotification /ru BUILTIN\Users
This seems to be working, but I’m wondering if you have advice for setting the task to run as the logged on user….
Thanks for all of you work!
Hey Martin,
Your toast solution looks great. I had a question before for the case when only signed scripts are allowed to run in the environment and I’m basically setting “CreateScriptsAndProtocols” Enabled=”False” and pushing the signed scripts through a GPO to all users, not sure if you have a better suggestion?
Another question will be, do you think it’s possible to add a logic to display the toast notification only if application/package is not installed? This will help me a lot and will be much appreciated if you can add this to your future releases.
Thanks.
No worries. Your suggestion in regards to the signed scripts is identical to what I suggested in your previous question, right? The option you talk about, to only display the toast if the app/package is not installed, is somehow built in. The toast is only displaying if the app/package is deployed and the rest is something collections is better at taking care of 🙂
Yeh… a bit specific environment here, so I’ve updated the “function Write-ApplicationIDRegistry” as per below and it looks to be working for me, thanks anyway:
if ($TestApplicationID) {
Write-Log -Message “ApplicationID: $RunApplicationIDValue was found in WMI as deployed to the client”
If ($TestApplicationID.InstallState -eq “NotInstalled”) {
Write-Log -Message “Writing the ApplicationID to registry as it’s not installed”
if ((Get-ItemProperty -Path $RegistryPath -Name $RegistryName -ErrorAction SilentlyContinue).$RegistryName -ne $RunApplicationIDValue) {
try {
New-ItemProperty -Path $RegistryPath -Name $RegistryName -Value $RunApplicationIDValue -PropertyType “String” -Force
}
catch {
Write-Log -Level Error -Message “Failed to write ApplicationID: $RunApplicationIDValue to registry”
}
}
}
Else {
If ($TestApplicationID.InstallState -eq “Installed”) {
Write-Log -Message “Application is already installed and will now exit the scrit”
Exit 0
}
}
}
This is honestly very, very good, the only caveat is it doesn’t check the execution status of the SCEM Package and not run/show the Toast if it was successfully installed. I fear this could be run over and over by users that really aren’t paying attention if it comes up again after a successful installation…
Martin,
It really is a nice solution, if I might offer some constructive comments?
Having the “Dismiss” button always enabled if the “Snooze” button is enabled I think is a mistake. Imagine you want to notify the user every 24 hours, you need to run the PowerShell script every 24 hours but you don’t know if it’s already running and the user chose “Snooze” or if it’s no longer active and they chose “Dismiss”. It would be better to not run a second instance of the script and to deal with it now, removing the “Dismiss” button and only leaving the “Run” or “Snooze” button at least won’t run multiple instances and yo can be certain it’s still running.
I also do understand you intend systems targeted with the script to drop out of the target Collection if the software condition is no longer valid but you have to run inventory aggressively for that (we run daily but default is weekly). It really would be better to check the install status and not display the script if the job was run with a success status returned…
Regards,
Jack
This is the sexiest thing since sliced bread!! Thanks!!
haha, thanks! 😀
Hi again Martin,
Do you know why the toast is still showing up during the lockscreen?
We have disabled it through GPO and I have checked the registry key has been created and set it to 1
\HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\PushNotifications
NoToastApplicationNotificationOnLockScreen
What else can we check? any thoughts?
Regards
Hello Martin,
Is it possibel to change the Toast duration time ?
Hello, do you mean the duration? If so, take a look a the scenario option in the config file. 🙂
Hello Martin,
Thank you for the great work here. I hope you can help us out.
In my organization we run a Windows 10 upgrade Task Sequence.
This allows us to keep/implement customizations.
I am having trouble understanding and I hope you can help out. From reading the instructions I gather…
We create a standard package in SCCM with command line:
Command line example: powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle
Hidden -File .\New-ToastNotification.ps1 -Config \\YourUNCPath\ToastNotificationScript\Configs\config-toast-osupgrade.xml
From config-toast-osupgrade.xml we build up our upgrade parameters.
1. What is “Target OS Mean”? Is this the users O/S version we want to upgrade from?
Or
Is this the O/S we want to upgrade to. (In our case 20H2).
2. You have entered package ID “KR100907″…. Here we would enter our upgrade
Task Sequence package ID I assume for the 20H2 upgrade.
3. We deploy both the upgrade TS and the new Toast Package to the appropriate
device collection.
– The end user gets the toast notification the next time SCCM checks in?
4. Can we place a URL into the “Body Text” pointing to instructions? (Will the URL
function from inside the toast notification?)
Thank you Martin. MS needs to put these features into the core of SCCM. User communication like this is pure gold.
Tony.
1) TargetOS is the OS build you plan on moving to (hence target), so in your case that would be the build number of 20H2 (19042).
2) Correct, the packageid of the task sequence
3) Correct, remember to deploy the task sequence with ‘Allow user to run the TS regardless of assignments’ enabled if having a required deployment. The TS needs to visible in the SC
4) No URLs in the body text I’m afraid. This is not something the framework in Windows can do.
Let me know how you move on 🙂
Hi Martin,
Can the “TargetOS” have more than one target build – 1803 & 1909 ?
Thanks
I’m afraid not. In that case, use two separate config.xml. 🙂
Hello!
The greeting based on time of the day is not working correctly here.
I get Good Evening in the Afthernoon.
Is it possibel to adjust this ?
regards Chantal
Yeah, check line 1744 in the script. Perhaps something with your language settings is a conflict here. I’m assuming 24-clock, which I know might not suit everyone 🙂
1744 ? -> toast scenario=”$Scenario”
No in the script itself, in the powershell script 🙂
Search for greeting. I guess the linenumber depends on which version you are using. If you search for greeting, you will find the section where the personal greeting is made up based on the time of day of a 24-clock. I might need to adjust this make it aware of local regional settings on the computer.
Hi Martin
Just found your script and it’s brilliant!
We are using it in only a Powershell use case with PDQ Deploy, and was wondering if there is anything stopping images being rendered from a UNC path rather than an http path as in the documentation? I’m away from my work now so will retest on Monday in case I’ve made an error, but thought I’d ask just in case.
Yeah, images on an UNC location is not supported. This is determined by the framework itself and not the script. So either local images next to the script (images folder) or images hosted via an http(s) protocol 🙂
This is a brilliant function to have. Using it as general notifications in TS works a charm.
However, I’m having a challenge with the SCCM deployed package. Notify for password change. In my test, I changed the period to 30 days. I received the notification once, clicked dismissed and it won’t appear again. The task is set to always rerun with an hourly run schedule.
I’m unable to find the log file as referred to in the guide.
Are you running the program in the user’s context? This is configured on the environment tab of the program (run with user’s rights and only when a user is logged on). If so, the log file should be in appdata\toastnotificationscript. Are your password actually expiring within those 30 days?
Yes, it’s expiring in 30 days. It showed the notification once.
Yes “Run with user’s rights” is ticked.
I made a change on the schedule now, looks like it is working, I will report back.
Should I use “Persist content in client cache”? Sound like a good option for this kind of deployment, especially if nothing in the notification is changing that often if it does. I’m referring to the Password Expiry notification only.
> “I made a change on the schedule now, looks like it is working, I will report back.”
Sounds great, let me know if any issues.
If you have a weekly reoccurring schedule, using persist content in client cache shouldn’t do much. Configmgr will never reach a point where the content is cleaned up. 🙂
Hi Martin,
Quick question: I created this package to run as user context but I got this error from execmgr.log
Unable to access network resource [C:\WINDOWS\ccmcache\4g] with currently known credentials.
we have the default permissions applied in ccmcache, so the user cannot navigate there… but I thought the Software Center could run it as user context. Any thoughts? I’m missing something?
Thank you
Thank you so much for this, it works great! Is it possible to disable the PendingFileRenameOperations check?
Yes, you will need to modify this directly in the function for TestingPendingReboot in the beginning of the script.
Hi Martin, thank you very much for this.
One thing I noticed is that I can’t seem to remove the Restart Now button. I have set the ActionButton1 button to False in the xml file and even removed the command from the Action1 which would trigger the reboot. I have already removed the Action2 button if that matters. I basically just want a Dismiss button, which I have showing. Thanks.
Hah, oddly enough, I had so many test notifications queued up that I didn’t see the new ones until a few minutes later. False alarm. 😉 Thanks again for this.
Hi Martin,
Just wondering if there is something I’m doing wrong. When I’m running a package install from the Toast Notification it will redirect it to Software Center and will open the Operating Systems but, instead or the package itself or the Installation Status tab.
Any idea why this is happening?
Yeah, with a package I’m assuming the package id of a task sequence and referring to using this with an upgrade of Windows. I see how that’s weird when using it for something else. You can correct this yourself, by removing one line in the new-toastnotification script, in the region where the custom scripts are being created.
So I can’t have both working in the same time? I have to choose one option?
Will be much appreciated you can give me more details?
Is it possible to use the OSupgrade option if you only use powershell for this? How would I go about doing that? Its implied that a task sequence needs to be used for the deployment of the OS upgrade.
OSupgrade option needs configmgr, either task sequence or feature updates 🙂
Hi Martin, this was so helpful thankyou, I have one issue I need helping with if possible?
Deploying this for an OS upgrade as a package with one action button the snooze button and dismiss. Ideally we wouldnt want the dismiss button just the action and snooze but you cant if you have the snooze. The issue we have is once the user presses dismiss the toast wont appear again, is there anyway to get around this?
Thanks,
Aidan
If you run this with configmgr, your re-run schedule would be responsible of showing the toast notification again, and again… and every so often you want it. Ideally, the re-run schedule is what you should rely on, so I recommend not using the snooze option, but rely on how often you run the script.
Getting error ” failed with exit code 4294770688 ” when i try run it on the local machine. I followed the same steps to call the xml from shared location. Any advise
Any way to make this run under a task sequence? Not in WinPE but in Windows 10. Cause under task sequence user deployments are not allowed. I used psappdeploy to make it run successfully but it shows the powershell window for a few seconds. And running powershell silently will also hide the toast notification.
I’m sure that’s possible. I actually have an unreleased version of the toast script lying around, which is capable of running coming from system context. Let me look into finishing that up. 🙂
See my latest blog post. I just released that version, which is able to run the script coming from a task sequence 🙂
Hi Martin,
Thanks for adding “prevention of having multiple toast notifications”, just got some complains from users receiving 3-4 in the same time :).
Not sure if the stuff you are doing are the same, but before using your solution, I use to run below code at the beginning of every Toast Notification scripts to clear the “toast history”.
Can you confirm pretty much same will happen using your newly added option?
# Load required namespaces
$null = [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime]
$null = [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime]
# Register the AppID in the registry for use with the Action Center, without this, the toast messages for PowerShell could be turned off by the user.
$app = ‘{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe’
$AppID = “{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\\WindowsPowerShell\\v1.0\\powershell.exe”
$RegPath = ‘HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings’
$null = New-Item -Path “$RegPath\$AppId” -Force
$null = New-ItemProperty -Path “$RegPath\$AppId” -Name ‘ShowInActionCenter’ -Value 1 -PropertyType ‘DWORD’
[windows.ui.notifications.toastNOtificationManager]::History.Clear($App)
So I basically had this:# Remove Toast Notification History for when using Powershell as application for the toast
Write-Log ” —- Remove Toast Notification History for when using Powershell as application for the toast — ”
# Load required namespaces
$null = [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime]
$null = [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime]
# Register the AppID in the registry for use with the Action Center, without this, the toast messages for PowerShell could be turned off by the user.
$app = ‘{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe’
$AppID = “{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\\WindowsPowerShell\\v1.0\\powershell.exe”
$RegPath = ‘HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings’
$null = New-Item -Path “$RegPath\$AppId” -Force
$null = New-ItemProperty -Path “$RegPath\$AppId” -Name ‘ShowInActionCenter’ -Value 1 -PropertyType ‘DWORD’
[windows.ui.notifications.toastNOtificationManager]::History.Clear($App)
# Remove Toast Notification History for when using Software Center as application for the toast
Write-Log ” —- Remove Toast Notification History for when using Software Center as application for the toast — ”
# Load required namespaces
$null = [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime]
$null = [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime]
# Register the AppID in the registry for use with the Action Center, without this, the toast messages for PowerShell could be turned off by the user.
$app = “Microsoft.SoftwareCenter.DesktopToasts”
$AppID = “Microsoft.SoftwareCenter.DesktopToasts”
$RegPath = ‘HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings’
$null = New-Item -Path “$RegPath\$AppId” -Force
$null = New-ItemProperty -Path “$RegPath\$AppId” -Name ‘ShowInActionCenter’ -Value 1 -PropertyType ‘DWORD’
[windows.ui.notifications.toastNOtificationManager]::History.Clear($App)
Not entirely the same Oleg. You are clearing the toasts which are stored in the OS, I prevent the catch up mechanic in ConfigMgr to be the cause of multiple toast notifications. Lets say you run the script everyday for a week, but a device is offline for 2. Those 2 days of being offline will cause the toast notifications to be displayed once the devices comes online. This can be prevented with the new option 🙂
i used this toast for our 2004 upgrade worked like a charm. modifying it to work for 20h2. i changed the xml to the new TS id and the target os to 19042. running the powershell script manually works fine but when running through an SCCM program i get an exit code 1 and it fails. i didnt see this with my previous package and they are set up the same way.
Are you sure that you have configured the program to run in the user’s context? It’s on the environment tab.
Hi Martin,
Many thanks for sharing this amazing script !
I plan to use it in config manager to remind users for Office ProPlus Upgrade.
Is there any way to exit and not display the toast notification if ApplicationID is already installed in Software ?
I would like to run the script as a package with custom interval but not if users have already installed the application.
Marc
Hi Marc, the only option you currently have in order to achieve this, is to manage your collections tightly. Depending on how often you rerun the toast script, you will have to run hardware inventory accordingly, so devices can move in/out of the collection where you are deploying the toast script.
Thank you Martin.
I have adapted the script for this deployment by adding a condition to execute only if Office ProPlus is not present.
Have a good day
That’s another option! Good day to you too 🙂
Hi Martin,
Excellent work. This will provide exactly what my organization is looking for. Is there anything you’re aware of that would allow body text to be forced to the next line, rather than a continuation on the current line?
Thanks.
Hi Tyler, I’m not familiar with a way to force a line break I’m afraid. 🙂
Hi Martin,
Like everyone here has already said, great script, it saved many hours at least for me being able to use your script. The only caveat for me is if people snooze (users find it useful) but before the snooze time is up and users reboot, the notification will show up regardless when the snooze time is finished, although the user has already rebooted. Is there a chance to include to clear snoozes if the user reboots or do you know from top of your head what parameter is needed?
Thanks dude
This will get you the currently snoozed items: $toastNotifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($appId) $toastNotifier.getScheduledToastNotifications()
Thanks Martin!
is it possibel to bypass the focus assist ? (when it’s on Alarm only)
Thank you for the script. Do you know if its possible to write a log once one of the buttons are pressed?
Can this be configured to show toasts when Windows Update requires reboots?
Can I configure countdowns?
Windows own notices aren’t good enough for me
(sorry if I ask and the Q is already asked but you have so many comments here)
Hi.
Thank you for this. I am trying to setup the Reboot Script but i get the below error. Im not sure what Im missing
Get-Service : Cannot find any service with service name ‘ccmexec’.
At C:\Source\ToastNotificationScript2.2.0\New-ToastNotification.ps1:1736 char:42
+ … (($SCAppStatus -eq “True”) -AND (-NOT(Get-Service -Name ccmexec))) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (ccmexec:String) [Get-Service], ServiceCommandException
+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
Write-Log : Error. Using Software Center app for the notification requires the ConfigMgr client installed
At C:\Source\ToastNotificationScript2.2.0\New-ToastNotification.ps1:1737 char:5
+ Write-Log -Level Error -Message “Error. Using Software Center app …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Write-Log
Write-Log : Error. Please install the ConfigMgr client or use Powershell as app doing the notification
At C:\Source\ToastNotificationScript2.2.0\New-ToastNotification.ps1:1738 char:5
+ Write-Log -Level Error -Message “Error. Please install the Config …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Write-Log
Thank you for this. I am trying to setup the Reboot Script but i get the below error. Im not sure what Im missing
Get-Service : Cannot find any service with service name ‘ccmexec’.
At C:\Source\ToastNotificationScript2.2.0\New-ToastNotification.ps1:1736 char:42
+ … (($SCAppStatus -eq “True”) -AND (-NOT(Get-Service -Name ccmexec))) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (ccmexec:String) [Get-Service], ServiceCommandException
+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
Write-Log : Error. Using Software Center app for the notification requires the ConfigMgr client installed
At C:\Source\ToastNotificationScript2.2.0\New-ToastNotification.ps1:1737 char:5
+ Write-Log -Level Error -Message “Error. Using Software Center app …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Write-Log
Write-Log : Error. Please install the ConfigMgr client or use Powershell as app doing the notification
At C:\Source\ToastNotificationScript2.2.0\New-ToastNotification.ps1:1738 char:5
+ Write-Log -Level Error -Message “Error. Please install the Config …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Write-Log
According to that logging information, you are running the script without ConfigMgr and you should switch to using powershell as the app doing the notification.
Hi,
Thank a lot for this!!!
Is it possible to remove the app name running the toast msg (Windows PowerShell/Software Center) or is this mandatory to have?
SF
You can, by using a little hack and workaround. I dont have the instructions by hand, but I will add them soon.
I would be interested in this as well 🙂
Here, using this “hack”, you can create your own custom app for the notifications and add whatever you want: https://smsagent.blog/2020/10/20/adding-your-own-caller-app-for-custom-windows-10-toast-notifications/
Just did a test run only running the ps1 so that it would default to the only xml I had fiddled with. It showed a powershell window for a moment, then nothing else, and no log files within appdata. Any ideas?
I read the PDF and figured out how to properly make the command line. Got a couple issues to iron out, but you can disregard that one.
Okay I can’t quite get it. I tried googling windows protocols, and tried putting “C:\Windows\CCM\ClientUX\SCClient.exe” directly, all I want is a button to open software center, but it won’t do it. What is the action button I need?
Thanks
The toast notification can only handle protocol based actions, thus if you need to open software center you would explicitly call something like softwarecenter:page=AvailableSoftware. Try it out in Run. if it works from Run, it works from the toast notification as well. 🙂
Hey everything working well but i cant seem to get the images working at all cant see anything in the log file relating to the images but it just shows all the text fine and launches software centre and kicks of the install for an available application however its just not displaying the images any ideas?
are you using any custom images? Are you having too much text? Try to cut down on the amount of characters and use the built in images.
Hi,
ready for testing that !!
here is the french translation, if you want include it:
Votre ordinateur doit redémarrer car il a dépassé le temps de fonctionnement maximal défini.
Raison: un redémarrage en attente a été trouvé dans le registre ou WMI.
Votre mot de passe va expiré le:
Dites. Votre ordinateur a besoin de redémarrer. Faites le maintenant.
Installer maintenant
En savoir plus
Rejeter
Veille
https://www.imab.dk
Le support vous rappelle gentiment…
Mise à jour de Windows 10 disponible!
Il y a une nouvelle mise à jour de Windows 10 de disponible. Installez la vous même, sinon nous le ferrons pour vous
Pas d’inquiétude! Vous receverez un nombre suffisant de rappels avant que toute action ne soit prise automatiquement.
Cliquez sur veille pour un rappel à nouveau dans:
Votre date limite est:
Bonjour
Bonjour
Bonsoir
Minutes
Heure
Heures
Ordinateur allumé depuis:
jours
Hi Martin,
Do you know if it’s possible to bold or underline the test in the Toast Notification? Example the text under ” “?
Hey Martin, I just downloaded and ran your script without changing anything but the toast notification that is popping up is a generic Windows PowerShell new notification. Out of the box, using the default config-toast XML file. Below is the console messages omitting some company info.
VERBOSE: Running supported version of Windows. Windows 10 and workstation OS detected
VERBOSE: Script is initially running in USER context
VERBOSE: No config file set as parameter. Using local config file
VERBOSE: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
VERBOSE: Successfully loaded \\****\****\****\_Nathan\Toast Application\Toast Reboot 1.1\Original\config-toast.xml
VERBOSE: Loading xml content from \\****\****\****\_Nathan\Toast Application\Toast Reboot 1.1\Original\config-toast.xml into variables
VERBOSE: Successfully loaded xml content from \\****\****\****\_Nathan\Toast Application\Toast Reboot 1.1\Original\config-toast.xml
VERBOSE: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
VERBOSE: Script version: 2.2.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols
VERBOSE: Running Get-DeviceUptime function
VERBOSE: PendingRebootUptime set to True. Checking for device uptime. Current uptime is: 0 days
VERBOSE: Greeting with given name selected. Replacing HeaderText
VERBOSE: Greeting with Good afternoon
VERBOSE: Running Get-GivenName function
VERBOSE: Given name retrieved from Active Directory: Nathan
VERBOSE: Creating the xml for no action button
VERBOSE: Creating the xml for displaying the second action button: actionbutton2
WARNING: This will always enable both action buttons and the dismiss button
WARNING: Replacing any previous formatting of the toast xml
WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
VERBOSE: Toast notification is used in regards to pending reboot. Uptime count is greater than -6
VERBOSE: Confirmed USER context before displaying toast
VERBOSE: All good. Toast notification was displayed
Excellent !!
I deployed the DPasswordExpiration and PendingReboot to my company. We love it !!
Hi Martin, I just downloaded the most recent version of this app and am having some troubles. Fresh from install without changing any config or powershell files, I ran it and it displays a powershell generic toast notification. Do you have a clue as to why its not performing as expected?
Do you run powershell in constrained language mode by any chance or have any other restrictions towards powershell? Do you run AppLocker?
I’m having the same issue and we do not run AppLocker.
Hi Martin,
Not sure if you are interested, but I’ve modified a bit the config file and the script to be able to use it for Windows Updates and O365 install. This requires to update monthly the XML with latest KBs and Office version.
Pretty sure it’s not the most optimal way to do this but it work fine for me 🙂
XML update:
Script update:
# Get Office 365 Version
$InstalledO365version = (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | ? {$_.DisplayName -like “Microsoft 365 Apps for enterprise – en-us*”}).DisplayVersion
$RunWindowsUpdates = $Xml.Configuration.Feature | Where-Object {$_.Name -like ‘RunWindowsUpdates’} | Select-Object -ExpandProperty ‘Enabled’
$TargetKB01 = $Xml.Configuration.Option | Where-Object {$_.Name -like ‘TargetKB01’} | Select-Object -ExpandProperty ‘KBNumber’
$TargetKB02 = $Xml.Configuration.Option | Where-Object {$_.Name -like ‘TargetKB02’} | Select-Object -ExpandProperty ‘KBNumber’
$TargetKB03 = $Xml.Configuration.Option | Where-Object {$_.Name -like ‘TargetKB03’} | Select-Object -ExpandProperty ‘KBNumber’
$TargetKB04 = $Xml.Configuration.Option | Where-Object {$_.Name -like ‘TargetKB04’} | Select-Object -ExpandProperty ‘KBNumber’
$TargetKB05 = $Xml.Configuration.Option | Where-Object {$_.Name -like ‘TargetKB05’} | Select-Object -ExpandProperty ‘KBNumber’
$TargetKB06 = $Xml.Configuration.Option | Where-Object {$_.Name -like ‘TargetKB06’} | Select-Object -ExpandProperty ‘KBNumber’
$Office365 = $Xml.Configuration.Option | Where-Object {$_.Name -like ‘Office365’} | Select-Object -ExpandProperty ‘O365Version’
# Toast used for Windows Updates. Checking Installed KBs. No need to display toast, if the KB is already Installed
$KBArray = @()
If ($TargetKB01 -ne $Null) {$KBArray += “$TargetKB01”}
If ($TargetKB02 -ne $Null) {$KBArray += “$TargetKB02”}
If ($TargetKB03 -ne $Null) {$KBArray += “$TargetKB03”}
If ($TargetKB04 -ne $Null) {$KBArray += “$TargetKB04”}
If ($TargetKB05 -ne $Null) {$KBArray += “$TargetKB05”}
If ($TargetKB06 -ne $Null) {$KBArray += “$TargetKB06”}
$KBsNumber = $null
$KBToInstallArray = @()
$KBInstalledArray = @()
foreach ($TargetKB in $KBArray) {
if (!(Get-HotFix -Id $TargetKB -ErrorAction SilentlyContinue )) {
$KBToInstallArray += “$TargetKB”
$KBsNumber = $KBsNumber + 1
}
Else { $KBInstalledArray += “$TargetKB”}
}
if (($RunWindowsUpdates -eq “True”) -AND (($KBsNumber -ne $null) -OR !($InstalledO365version -ge $Office365))) {
If ($KBsNumber -NE $null) {Write-Log -Level Warn -Message “$KBToInstallArray – Not Installed”}
If (!($InstalledO365version -ge $Office365)) { Write-Log -Message “Office 365 Latest version $Office365 – Not Installed” }
Write-Log -Message “Toast notification is used in regards to Windows Updates”
Display-ToastNotification
# Stopping script. No need to accidently run further toasts
break
}
else {
Write-Log -Level Warn -Message “Conditions for displaying toast notifications for RunWindowsUpdates are not fulfilled.”
Write-Log -Level Info -Message “$KBInstalledArray – are Installed”
Write-Log -Message “Latest Office 365 version – $InstalledO365version Installed !!!”
}
Would be great if you can add something similar to your next release 🙂 . Thanks.
Not sure if you got XML config modification in my preview message:
Hmm… doesn’t go through for some reason:
###
###
###
###
###
###
###
###
Removing
Feature Name=”RunWindowsUpdates” Enabled=”True” / !– Enables he toast to run Windows Updates —
Option Name=”TargetKB01″ KBNumber=”KB4565554″ / !– The actual KB Id number we need to install.–
Option Name=”TargetKB02″ KBNumber=”KB4497165″ / !– The actual KB Id number we need to install. —
Option Name=”TargetKB03″ KBNumber=”KB4517245″ / !– The actual KB Id number we need to install.–
Option Name=”TargetKB04″ KBNumber=”KB4517245″ / !– The actual KB Id number we need to install.–
Option Name=”TargetKB05″ KBNumber=”” / !– The actual KB Id number we need to install.–
Option Name=”TargetKB06″ KBNumber=”” / !– The actual KB Id number we need to install. —
Option Name=”Office365″ O365Version=”16.0.14131.20320″ / !– Office 365 Build Version to Install. —
Hi, is it possible to force a restart using this script, say after the deadline is reached for software updates
Hello, anyone successfully deployed this via Intune as a PS Script?
I created 1 PS script to download the images, xml and toast notification ps from a blob, then executed the ps but it does not appear. Any suggestions besides creating a win32app? Thanks
I did re-write the script quite a bit, hacked it up essentially and removed the need for the XML file and have integrated it into Intune as a proactive remediation. Made variables for the things I needed from the XML. I use Azure public blob storage for the images as well.
It’s… probably not the prettiest implementation but it does the job.
Hello,
Is there anyway I can modify the script to have 2 action buttons and that’s it? I don’t want to include a dismiss button as I feel like it’ll get confusing. I added this script to another script we have that initiates a reboot to happen in 2 minutes. My intention is to have one button say “Reboot” which reboots the machine immediately and the other button to say “Abort Reboot” which will cancel the reboot that will be happening in 2 minutes from when the notification is shown. I’ve already modified the script to have a custom script and protocol called “ToastAbort” and it works perfectly. I’m just hoping I can create a notification to have those 2 buttons as options and that’s it. Whenever I try to do that, it still creates the dismiss button regardless if put False for it in the configuration XML. Hopefully this all makes sense. Any help would be greatly appreciated.
how can i deploy the toast while sccm is pending reboot?
I’m having the same issue and we do not run AppLocker.
how can i run the toast with sccm while the pc is in pending reboot?
Hello,
I believe I have everything set up correctly but I get this in the logs and the toast never displays.
2021-08-24 11:19:02 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2021-08-24 11:19:02 INFO: Something is not right about toast notifications in Windows. The script will run, but toasts might not be displayed
2021-08-24 11:19:02 INFO: No config file set as parameter. Using local config file
2021-08-24 11:19:02 INFO: Successfully loaded C:\WINDOWS\ccmcache\z\config-toast.xml
2021-08-24 11:19:02 INFO: Loading xml content from C:\WINDOWS\ccmcache\z\config-toast.xml into variables
2021-08-24 11:19:02 INFO: Successfully loaded xml content from C:\WINDOWS\ccmcache\z\config-toast.xml
2021-08-24 11:19:02 INFO: Creating the xml for no dismiss button
2021-08-24 11:19:02 INFO: Creating the xml for snooze button
2021-08-24 11:19:02 INFO: Toast notification is used in regards to OS upgrade. Taking running OS build into account
2021-08-24 11:19:02 INFO: All good. Displaying the toast notification
2021-08-24 11:19:02 WARNING: Something went wrong when displaying the toast notification
2021-08-24 11:19:02 WARNING: Make sure the script is running as the logged on user
I’m logged in as a regular user when the script runs but I have the program to run with admin rights. I also disabled the step in the xml to get greet given name but no luck.
Hello Martin,
how would I achieve a force reboot after say 3 snooze action, is there a way to write the snooze action to the registry and at check it to force the reboot.
Hi.
Just downloaded this to try it as I’ve a problem with another toast script not displaying the popup. Sadly yours doesn’t either. The log file finishes with
INFO: All good. Toast notification was displayed
except that it wasn’t. Presume from what I’ve read that it shouldn’t need admin rights or anything special? Any suggestion as to where to look?
Thanks
Worked out what the problem was and would like to put it here for others’ benefit. It’s related to the information in https://toastit.dev/2017/10/08/burnttoast-no-appid/ and my problem was I didn’t have a Powershell shortcut in my start menu – it should be in the user bit but we hadn’t populated it in our profiles.
Hi Martin!
First of all I would like to say this is great work!
I am wondering if there is a way to have an action button launch an executable on the system drive? I am looking to use it to start BitLocker Drive Encryption by launching MBAMClientUI.exe.
Hey Chris, your question is not getting deleted, but I need to approve it in order to prevent spam bots to fill up the entire comment section. I’d say yes, you’d be able to create a custom protocol launching whatever .exe you need. Take a peek at this post for inspiration: https://www.imab.dk/windows-10-toast-notification-script-update-personal-greeting-and-protocol-based-reboot/
Thanks Martin!
I got the custom protocol working.
I am however running into another issue. I am trying to run this as a remediation script in Configuration Manager CI. I have it setup to run using the logged on user credentials and it is using the config file stored in Azure blob storage as you showed. The problem is the script is not displaying and the log shows the following:
2021-11-03 11:00:14 INFO: Script is initially running in USER context
2021-11-03 11:00:14 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2021-11-03 11:00:14 INFO: Successfully loaded 1
2021-11-03 11:00:14 INFO: Toast notification is not enabled. Please check 1 file
I have double checked the path to the script and it appears correct. I’m not sure where “1” is coming from. Any idea?
Looks like it’s not loading the config.xml properly. How are you referencing the config file? If hosted online, the log file should indicate that with a ONLINE tag.
Here is the beginning of the script. I copied this locally into PS ISE and it does display the toast notification when run this way. Does something have to be changed for it to run from CM config item remediation script?
[CmdletBinding()]
param(
[Parameter(HelpMessage=’Path to XML Configuration File’)]
[string]$Config = “https://123configfiles.blob.core.windows.net/toastnotification/config-toast-bl.xml”
)
#region Functions
# Create Write-Log function
function Write-Log() {
I have added my package on SCCM and setup my upgrade Task Sequence to upgrade my Windows 10 machines to 21H1 (tageting my out of support machines fo rnow)
I just wnated to test the Toast to see what it would look like. I tried running my script and the notification does not display. I double checked the registry and the notifications are enabled. Any thoughts and assistance please? Below is the export from the log/PS command
VERBOSE: Running supported version of Windows. Windows 10 and workstation OS detected
VERBOSE: Toast notifications are enabled in Windows
VERBOSE: No config file set as parameter. Using local config file
VERBOSE: Successfully loaded C:\XXX\Toast\config-toast.xml
VERBOSE: Loading xml content from C:\XXX\Toast\config-toast.xml into variables
VERBOSE: Successfully loaded xml content from C:\XXX\Toast\config-toast.xml
VERBOSE: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
VERBOSE: Running Write-PackageIDRegistry function
VERBOSE: PackageID: XXX was found in WMI as deployed to the client
VERBOSE: Writing the PackageID to registry
VERBOSE: Greeting with given name selected. Replacing HeaderText
VERBOSE: Running Get-GivenName function
VERBOSE: Given name retrieved from Active Directory
VERBOSE: Creating the xml for displaying both action button and dismiss button
VERBOSE: Creating the xml for snooze button
WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
WARNING: Conditions for displaying default toast notification are not fulfilled
Hi Martin,
Awesome job! really Cool! one quick question, Our AAD devices are unable to get to on-prem domain to get the password expiration notification for the user when not connected to the VPN or corporate network. Which is by design, but there should be a way to search for the azure AD acc instead of looking for the on-prem domain?
Hi Martin,
I tried have my Windows 20H2 Task Sequence setup in ConfigMgr, and deployed it to my collection. I also created the package for the toast notification and set that to run first for my TS. I tested running the script, but the notification does not display. I also I tested manually, and it still does not display. I used both UseSoftwareCenterApp nd Powershell as Enabled=False and True as well as, but it still does not display. I keep getting the message that Conditions for displaying toast notifications for UpgradeOS are not fulfilled
below is the the xml I have for
Your computer is required to restart due to having exceeded the maximum allowed uptime.
Reason: Pending reboots was found in registry or WMI.
Your password will expire on:
Hey you – wake up. Your computer needs to restart. Do it now.
Restart now
Learn More
Dismiss
Snooze
http://www.massmart.co.za
Massmart IT kindly reminds you…
A Windows 10 upgrade available!
There’s a new Windows upgrade available. Do yourself a favor and install it yourself…. or we will do it for you 😉
Don’t worry! You will receive an adequate amount of reminders before any actions are taken automatically.
Click snooze to be reminded again in:
Your deadline is:
Good morning
Good afternoon
Good evening
Minutes
Hour
Hours
Computer uptime:
days
Below is the log
VERBOSE: Running supported version of Windows. Windows 10 and workstation OS detected
VERBOSE: Script is initially running in USER context
VERBOSE: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
VERBOSE: Successfully loaded .\config-toast.xml
VERBOSE: Loading xml content from .\config-toast.xml into variables
VERBOSE: Successfully loaded xml content from .\config-toast.xml
VERBOSE: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
VERBOSE: Script version: 2.2.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and
protocols
VERBOSE: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
VERBOSE: Running Write-PackageIDRegistry function
VERBOSE: PackageID: PT100186 was found in WMI as deployed to the client
VERBOSE: Writing the PackageID to registry
VERBOSE: Greeting with given name selected. Replacing HeaderText
VERBOSE: Greeting with Good morning
VERBOSE: Running Get-GivenName function
VERBOSE: Given name retrieved from Active Directory: Kesh
VERBOSE: Creating the xml for no action button
VERBOSE: Creating the xml for displaying the second action button: actionbutton2
WARNING: This will always enable both action buttons and the dismiss button
WARNING: Replacing any previous formatting of the toast xml
WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
WARNING: Conditions for displaying default toast notification are not fulfilled
Take a look at the TargetOS option in the config.xml This should match a OS build which is higher than the one you’re currently running.
For some reason I keep getting two errors below
Failed to check enrollment url, 0x00000001: execmgr 11/17/2021 2:15:00 PM 11304 (0x2C28)
Script for Package:SMC00603, Program: Toast OS Upgrade Notification failed with exit code 1 execmgr 11/17/2021 2:14:02 PM 17240 (0x4358)
I followed the instructions but cant seem to go around this. Any help is appreciated.
A log file should be generated for you in appdata\toastnotificationscript which will tell you more about the error. I exit the script with code 1 several places, if things are not working as expected.
Hi Martin,
In our organization the workstations are hybrid AAD joined. The users are working remotely and VPN in to access on-prem resources. I’ve noticed the toast notification script only displays the user’s name when the user has the workstations connected to the VPN. Is there a method to get it to work over the Internet with AAD?
Hey and weird. The script is designed to pick up the given name from registry if no AD is available. The toastnotificationscript log will also tell you when that happens. Can you provide a log file from that specific scenario? 🙂
Hi Martin,
Here is the output from the log.
2021-11-17 10:20:30 INFO: Running Get-GivenName function
2021-11-17 10:20:30 ERROR: Current security context is not associated with an Active Directory domain or forest.
2021-11-17 10:20:30 INFO: Given name not found in AD or no local AD is available. Continuing looking for given name elsewhere
2021-11-17 10:20:30 INFO: Given name not found in registry. Using nothing as placeholder
Looks like the registry key I use to find the given name, does not exist on your devices. If you have given name registered elsewhere in registry, you can update the Get-GivenName function in the script to match this. 🙂
Okay I see what it is doing. I can manually see the LastLoggedOnDisplayName registry entry without admin rights, so that should be working okay. The values in our organization are in format “lastname, firstname”. Could the comma in this value be causing a problem? If so, do you have any ideas how I could modify the script?
I’d extract the Get-GivenName out of the script and run that separately. What result do you get?
Hi Martin,
It seems it is displaying lastname,(comma). It doesn’t display the first name. Any idea how to have it display the first name as well?
Right, that would require a slight adjustment of the Get-GivenName function to pick the first name in reverse order 🙂
Anyone know how to get custom protocols ? I notice the screenshot has for ADPasswordExpiration has settings button but not sure how to get this or change it
I’m not sure I understand your question I’m afraid. What do you need to change? The ADPasswordExpiration is not a custom protocol, but something I built into the script and therefore has settings in config.xml 🙂
https://www.imab.dk/wp-content/uploads/2019/09/2019-09-24-16_36_52-Window.png
I cannot find the settings to configure the ActionButton1 to display the option in the image above or to provide the users an option to click on the button and go to change password screen (How to create Custom Scripts/Protocols like ToastReboot if i want to change the display on ActionButton1 or ActionButton2
The config-toast-adpwexpiration.xml settings seem to be an copy of the config-toast, I was thinking these were filled out to be based on your examples images
If you put following in Run “ms-settings:signinoptions:” it will take you to a place in settings, where the user is able to reset their password. What’s the button is called, is defined in the config.xml. I believe the various .xml files I include is different from each other on this part. You can reach out to my email at mab@imab.dk if things are still giving you troubles 🙂
Question
How can I get this to execute a large group of machines remotely. When I try to execute this script on remote systems it appears to just run on my system multiple times. Can someone tell me what I could be doing wrong. How can I get this run on remote systems under the logged in users session.
The script is designed to work with ConfigMgr. Are you using ConfigMgr? 🙂
We are but I do not have access to it to implement this script. I was wondering if there was a way to run it from powershell.
I haven’t tested remote PowerShell and the script in any way I’m afraid. Everything is designed around ConfigMgr or Intune and Group Policy as a last resort.
Hi Martin – thank you for this great resource! We are using it to manage our latest feature update, and my boss is so excited by the results he asked me if we can use it every month for regular software updates in SCCM. Is that possible?
Hi Mike, I’m so glad to hear that. Yes, you can specify a single KB in the config.xml Let’s say the monthly CU for Windows 10, and it should work similar to feature updates. I haven’t worked specifically with that scenario though, so you will have to give it a try to see if it process is acceptable.
Hi Martin! I have built custom windows update, alert and reboot procedure based on your scripts. Great work!
In my case there were issues when files of script did not copy to clients computers via group policy yet, and scheduled task starting script shows alert from windows script host like “script not found”
For me it was solved by adding /b to arguments of wscript.exe in scheduled task:
wscript.exe /b “C:\ProgramData\ToastNotificationScript\PendingReboot\Hidden.vbs” “C:\ProgramData\ToastNotificationScript\PendingReboot\RunToastHidden.cmd”
Hope this will be useful for your followers, and maybe you add this hack to pdf manual distributed with script
Hi Martin,
Thanks for this it is amazing!
I have a script that runs from intune as a script to rename the device, i am not sure what i need to add to the script to get it to force a toast reboot is required ?
any help apreciated.
Hi Martin
Thank you for this Great script! we are using this as feature upgrade reminder to users in our org.
One issue i am enountering is when using URL that has special characters like “=” in its path for value of Action2 button in the xml file.
The URL points to a service now KB article which is in format
“https://comapnyname.service-now.com/esp?Id=1403993”
when checking logs, i get this:
“” to type “System.Xml.XmlDocument”. Error: “‘=’ is an unexpected token. The expected token is ‘;’. Line 34, position 91.””
any suggestions?
I am using tinyurl short url for now as workaround but it would be nice if i can use the direct link
Thanks
Hey Sunny, you need to escape the character. Try search for ‘escape’ in the comment section. There are a few examples of how this has been done by other people 🙂
Thanks Martin
replacing “&” with “&” works
I have been using previous versions of this product with great success, an upgrade and survey prompt for Windows Features updates. One issue encountered was that users could simply set their Focus Assist settings to Priority-/Alarms only, with no programmatic way to register an exception. From reading 2.3.0 notes has this been specifically solved?
Right. You can even configure the toast via the config.xml to be an alarm. Change the type from reminder to alarm. Also, using the new feature mentioned in 2.3.0 will indefinitely prevent the user from disabling the notifications 🙂
Excellent! This toolset is great for solving the issue of communicating to the logged on users of hotdesk/multi user devices that are targeted for upgrade, where user based comms does not work, and stats likely primary user are not reliable.
I did change a few things for our purposes: adding user button press logging to the dynamically generated ToastRunPackageID script, for when users say they did not press it but actually did.
Write-EventLog -LogName “Application” -Source “WSH” -EventID 54 -EntryType Information -Message “Windows 10 20H2 Upgrade Toast Notification: User clicked on Upgrade button.”
And if multiple instances of ToastNotificationScript version are installed, then there can be user protocolhandler conflicts, so I modified: HKCU:\SOFTWARE\ToastNotificationScript -> UpgradeToastNotificationScript, and then was sure to delete these HKCU keys on uninstall, as I will be using this for the next Windows Feature rollout at the same org.
Greetings
I would like to express my gratitude to the author thank you for the work done
But I had a small problem when implementing this product.
I made a group policy to copy files and add tasks according to the instructions, but the alert works every time the user fully logs in or reboots.
Namely, the user is shown a window asking to reboot the system, he performs it, and when he logs in, he again sees information about the need to reboot.
It seems that the parameter does not apply
Please tell me how to fix the error and so that the information window is displayed only if the MaxUptimeDays parameter is exceeded
Can you paste the content of the log file, for when this is happening? The log is located in appdata\ToastNotificationScript. Also, what value have you configured in the MaxUptimeDays option?
Log After Reboot
2022-01-14 12:00:45 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2022-01-14 12:00:45 INFO: Script is initially running in USER context
2022-01-14 12:00:45 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2022-01-14 12:00:45 INFO: Successfully loaded C:\ProgramData\ToastNotificationScript\PendingReboot\config-toast.xml
2022-01-14 12:00:45 INFO: Loading xml content from C:\ProgramData\ToastNotificationScript\PendingReboot\config-toast.xml into variables
2022-01-14 12:00:48 INFO: Successfully loaded xml content from C:\ProgramData\ToastNotificationScript\PendingReboot\config-toast.xml
2022-01-14 12:00:48 INFO: Running Register-NotificationApp function
2022-01-14 12:00:48 INFO: Created registry entries for custom notification app: iMAB.DK NOTIFICATIONS
2022-01-14 12:00:48 INFO: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
2022-01-14 12:00:48 INFO: Script version: 2.3.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols
2022-01-14 12:00:48 INFO: Running Get-DeviceUptime function
2022-01-14 12:00:50 INFO: PendingRebootUptime set to True. Checking for device uptime. Current uptime is: 0 days
2022-01-14 12:00:50 INFO: Greeting with given name selected. Replacing HeaderText
2022-01-14 12:00:50 INFO: Greeting with Good afternoon
2022-01-14 12:00:51 INFO: Running Get-GivenName function
2022-01-14 12:00:56 INFO: Given name retrieved from Active Directory: Oleksandr
2022-01-14 12:00:56 INFO: Creating the xml for no action button
2022-01-14 12:00:56 INFO: Creating the xml for displaying the second action button: actionbutton2
2022-01-14 12:00:56 WARNING: This will always enable both action buttons and the dismiss button
2022-01-14 12:00:56 WARNING: Replacing any previous formatting of the toast xml
2022-01-14 12:00:56 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2022-01-14 12:00:56 INFO: Toast notification is used in regards to pending reboot. Uptime count is greater than -6
2022-01-14 12:00:56 INFO: Confirmed USER context before displaying toast
2022-01-14 12:00:58 INFO: All good. Toast notification was displayed
Config File @config-toast.xml@
Your computer is required to restart due to having exceeded the maximum allowed uptime.
Reason: Pending reboots was found in registry or WMI.
Your password will expire on:
Hey you – wake up. Your computer needs to restart. Do it now.
Restart now
Learn More
Dismiss
Snooze
https://www.imab.dk
Helpdesk kindly reminds you…
Your computer needs to restart!
For security and stability reasons, we kindly ask you to restart your computer as soon as possible.
Restarting your computer on a regular basis ensures a secure and stable Windows. Thank you in advance.
Click snooze to be reminded again in:
Your deadline is:
Good morning
Good afternoon
Good evening
Minutes
Hour
Hours
Computer uptime:
days
config-toast.xml
Your computer is required to restart due to having exceeded the maximum allowed uptime.
Reason: Pending reboots was found in registry or WMI.
Your password will expire on:
Hey you – wake up. Your computer needs to restart. Do it now.
Restart now
Learn More
Dismiss
Snooze
https://www.imab.dk
Helpdesk kindly reminds you…
Your computer needs to restart!
For security and stability reasons, we kindly ask you to restart your computer as soon as possible.
Restarting your computer on a regular basis ensures a secure and stable Windows. Thank you in advance.
Click snooze to be reminded again in:
Your deadline is:
Good morning
Good afternoon
Good evening
Minutes
Hour
Hours
Computer uptime:
days
You haven’t changed the MaxUptimeDays value. It’s still configured to -6. How many days do you allow your devices to run, before you want to nag them about rebooting? If 3 days, configure the config.xml accordingly to 3 and not -6 🙂
Do I need to specify the maximum number of days without a reboot without the “-” symbol?
Is that the whole problem?!
Since the conditions are no more than 6 days, it suits me
Yes, the negative value (-6) is just for testing, as the computer always have an uptime greater than -6 days. 🙂
So I incorrectly translated the text from English into my native language.
Thank you very much for your help))
Hi!
This is my config-toast.xml
______________________________________________________
Your computer is required to restart due to having exceeded the maximum allowed uptime.
Reason: Pending reboots was found in registry or WMI.
Your password will expire on:
Hey you – wake up. Your computer needs to restart. Do it now.
Restart now
Learn More
Dismiss
Snooze
https://www.imab.dk
Helpdesk kindly reminds you…
Your computer needs to restart!
For security and stability reasons, we kindly ask you to restart your computer as soon as possible.
Restarting your computer on a regular basis ensures a secure and stable Windows. Thank you in advance.
Click snooze to be reminded again in:
Your deadline is:
Good morning
Good afternoon
Good evening
Minutes
Hour
Hours
Computer uptime:
days
Din computer er påkrævet at genstarte, da den har overskredet den maksimale oppetid.
Årsag: Udestående genstart fundet i registry eller WMI.
Dit password vil udløbe:
Hej dig – vågn op. Din computer skal genstarte. Gør det nu.
Genstart nu
Mere Info
Afvis
Udskyd
https://www.imab.dk
En venlig påmindelse fra Helpdesk
Din computer skal genstarte!
Af hensyn til din computers sikkerhed og stabilitet, beder vi dig genstarte din computer snarest muligt.
At genstarte sin computer regelmæssigt, er med til at sikre et sikkert og stabilt Windows. På forhånd tak.
Klik udskyd for at blive påmindet igen om:
Din tidsfrist er:
Godmorgen
God eftermiddag
Godaften
Minutter
Time
Timer
Computer oppetid:
dage
Din dator behöver startas om då den överskridit den maximala tillåtna upptiden.
Orsak: Väntande omstart hittades i registret eller WMI.
Ditt lösenord går ut:
Hej du – vakna upp. Datorn måste starta om. Gör det nu.
Starta Om
Starta Om
Stäng
Påminn
https://www.imab.dk
En vänlig påminnelse från IT…
Din dator behövs starta om
För att kunna garantera datorns säkerhet och stabilitet ber vi dig att starta om datorn så snart som möjligt.
Att starta om sin dator regelbundet bidrar till en stabilare och säkrare It-miljö. Tack på förhand!
Klicka på Påminn för att bli påmind igen:
Slutdatum är:
God morgon
God eftermiddag
God kväll
Minuter
Timma
Timmar
Datorns upptid:
dagar
_______________________________________________
Log file:
2022-01-15 21:10:26 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2022-01-15 21:10:26 INFO: Script is initially running in USER context
2022-01-15 21:10:26 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2022-01-15 21:10:26 INFO: Successfully loaded \\sccm\source\RebootNotification\config-toast.xml
2022-01-15 21:10:26 INFO: Loading xml content from \\sccm\source\RebootNotification\config-toast.xml into variables
2022-01-15 21:10:26 INFO: Successfully loaded xml content from \\sccm\source\RebootNotification\config-toast.xml
2022-01-15 21:10:26 INFO: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
2022-01-15 21:10:26 INFO: Script version: 2.3.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols
2022-01-15 21:10:26 INFO: Running Get-DeviceUptime function
2022-01-15 21:10:27 INFO: PendingRebootUptime set to True. Checking for device uptime. Current uptime is: 1 days
2022-01-15 21:10:27 INFO: Greeting with given name selected. Replacing HeaderText
2022-01-15 21:10:27 INFO: Greeting with personal greeting: Good evening
2022-01-15 21:10:27 INFO: Running Get-GivenName function
2022-01-15 21:10:27 INFO: Given name not found in AD or no local AD is available. Continuing looking for given name elsewhere
2022-01-15 21:10:27 INFO: Given name not found in registry. Using nothing as placeholder
2022-01-15 21:10:27 INFO: Creating the xml for no action button
2022-01-15 21:10:27 INFO: Creating the xml for displaying the second action button: actionbutton2
2022-01-15 21:10:27 WARNING: This will always enable both action buttons and the dismiss button
2022-01-15 21:10:27 WARNING: Replacing any previous formatting of the toast xml
2022-01-15 21:10:27 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2022-01-15 21:10:27 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2022-01-15 21:10:27 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2022-01-15 21:10:27 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2022-01-15 21:10:27 WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
2022-01-15 21:10:27 WARNING: Conditions for displaying default toast notification are not fulfilled
Running through CB SCCM, as a package under user rights
The xml file is on a share the user can read. Running Win 11.
where is the “local” file supposed to be? any ideas on the warnings? thanks
What kind of toast are you expecting to see? Not of the conditions to display any of the toasts are fulfilled, therefore you don’t see any. 🙂
Ok, so how do i enable any of these conditions?
Conditions for displaying toast notifications for pending reboot uptime are not fulfilled (where are these conditions? in the config-=toast.xml?
where in the registry is this? what key or value is queried?
Conditions for displaying toast notifications for pending reboot registry are not fulfilled
thanks
The script does not query the registry in this case. Have a look at the Get-DeviceUptime function. It queries WMI. 🙂
it says: WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
I have it set to toast notify if its more than 4 days, thus, if i read this correct, since the machine has been up only 2 days no notification will appear, but after 4 days, then i should get a notification screen.
Correct?
If you configure MaxUptimeDays in the config.xml file to 4, your computers needs to have an uptime more than 4 days in order to see the toast notification, that’s correct 🙂
Hey Martin,
Love this, but running into a weird scenario. I’m testing this a MECM package, running it with user rights as instructed. Here is the command I am running: powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\New-ToastNotification.ps1 -Config config-toast.xml
However, when I test on my machine and a few coworkers, it runs fine as expected. Folders/log file gets created in Appdata and the toast displays. When I test on a few people outside of my team, it doesn’t create anything so I can’t look at any log files to troubleshoot. I just get this in the execmgr.log file: Script for Package:XXXXXXXX, Program: Run Toast Notification failed with exit code 1
The only difference between us and them are local admin rights. Any ideas why this would affect it?
Hey Todd, exit code 1 represent some sort of error in the execution of my script. If anything goes unexpected, I exit with 1. This seem to happen even before the log file is created.
On those devices where this fails, are you able to run the script manually outside of ConfigMgr with the same cmdline from within PowerShell?
Hi Martin,
Yes I am able to. I just tested it with my test account that has no admin rights. I had to set the execution policy to bypass first, but that’s expected. Here is the output from the PowerShell window…
PS C:\windows\ccmcache\q> .\New-ToastNotification.ps1 -config .\config-toast.xml
VERBOSE: Creating C:\Users\tchristensen-test\AppData\Roaming\ToastNotificationScript\New-ToastNotification.log.
VERBOSE: ToastNotificationScript registry path not found. Creating it: HKCU:\SOFTWARE\ToastNotificationScript
VERBOSE: CustomScriptPath not found. Creating it:
C:\Users\tchristensen-test\AppData\Roaming\ToastNotificationScript\Scripts
VERBOSE: Running supported version of Windows. Windows 10 and workstation OS detected
VERBOSE: Script is initially running in USER context
VERBOSE: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
VERBOSE: Successfully loaded .\config-toast.xml
VERBOSE: Loading xml content from .\config-toast.xml into variables
VERBOSE: Successfully loaded xml content from .\config-toast.xml
VERBOSE: Running Register-NotificationApp function
VERBOSE: Created registry entries for custom notification app: LTCG NOTIFICATIONS!
VERBOSE: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
VERBOSE: Registry value of ScriptsAndProtocolsVersion does not match Script version: 2.3.0
VERBOSE: Creating scripts and protocols for the logged on user
VERBOSE: Running Write-CustomActionRegistry function: ToastReboot
VERBOSE: Running Write-CustomActionRegistry function: ToastRunApplicationID
VERBOSE: Running Write-CustomActionRegistry function: ToastRunPackageID
VERBOSE: Running Write-CustomActionRegistry function: ToastRunUpdateID
VERBOSE: Running Write-CustomActionScript function: ToastReboot
VERBOSE: Running Write-CustomActionScript function: ToastRunApplicationID
VERBOSE: Running Write-CustomActionScript function: ToastRunPackageID
VERBOSE: Running Write-CustomActionScript function: ToastRunUpdateID
VERBOSE: Running Write-CustomActionScript function: InvokePSScriptAsUser
Hive: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings
Name Property
—- ——–
Toast.Custom.App
ShowInActionCenter : 0
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\No
tifications\Settings\Toast.Custom.App
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\No
tifications\Settings
PSChildName : Toast.Custom.App
PSDrive : HKCU
PSProvider : Microsoft.PowerShell.Core\Registry
Enabled : 1
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifica
tions\Settings\Toast.Custom.App
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifica
tions\Settings
PSChildName : Toast.Custom.App
PSDrive : HKCU
PSProvider : Microsoft.PowerShell.Core\Registry
SoundFile :
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifica
tions\Settings\Toast.Custom.App
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifica
tions\Settings
PSChildName : Toast.Custom.App
PSDrive : HKCU
PSProvider : Microsoft.PowerShell.Core\Registry
VERBOSE: Greeting with given name selected. Replacing HeaderText
VERBOSE: Greeting with Good morning
VERBOSE: Running Get-GivenName function
VERBOSE: Given name retrieved from Active Directory: Todd
VERBOSE: Creating the xml for no action button
WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
WARNING: Conditions for displaying toast notification for ADPasswordExpiration are not fulfilled
VERBOSE: Toast notification is not used in regards to OS upgrade OR Pending Reboots OR ADPasswordExpiration. Displaying
default toast
VERBOSE: Confirmed USER context before displaying toast
VERBOSE: All good. Toast notification was displayed
All good. Toast notification was displayed
Tried again on the same system via MECM, and still get the same error code 1.
Can I get you to try without specifying the -config parameter? I’m assuming you are leaving the config-toast.xml within the same package with the default name, right? Try to run it via memcm without the -config parameter.
Hi Martin,
I removed the -config parameter like you asked. Running it manually works, but I still get the exit code 1 from MECM. Below is the output from the execmgr.log file for running it…
Executing program as a script execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Found executable file Powershell.exe with complete path C:\WINDOWS\System32\WindowsPowerShell\v1.0\Powershell.exe execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Successfully prepared command line “C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe” -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\New-ToastNotification.ps1 execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Command line = “C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe” -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\New-ToastNotification.ps1, Working Directory = C:\WINDOWS\ccmcache\q\ execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Running “C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe” -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\New-ToastNotification.ps1 with 32bitLauncher execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Created Process for the passed command line execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Raising event:
[SMS_CodePage(437), SMS_LocaleID(1033)]
instance of SoftDistProgramStartedEvent
{
AdvertisementId = “P0020607”;
ClientID = “GUID:3CB295E0-B1F9-4AAD-AE52-2AC44AB16386”;
CommandLine = “\”C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\” -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\\New-ToastNotification.ps1″;
DateTime = “20220119172118.060000+000”;
MachineName = “HPV_TLC3”;
PackageName = “P0000466”;
ProcessID = 3844;
ProgramName = “Run Toast Notification”;
SiteCode = “P00”;
ThreadID = 3172;
UserContext = “CORP\\tchristensen-test”;
WorkingDirectory = “C:\\WINDOWS\\ccmcache\\q\\”;
};
execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Raised Program Started Event for Ad:P0020607, Package:P0000466, Program: Run Toast Notification execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Raising client SDK event for class CCM_Program, instance CCM_Program.PackageID=”P0000466″,ProgramID=”Run Toast Notification”, actionType 1l, value NULL, user NULL, session 4294967295l, level 0l, verbosity 30l execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Raising client SDK event for class CCM_Program, instance CCM_Program.PackageID=”P0000466″,ProgramID=”Run Toast Notification”, actionType 1l, value , user NULL, session 4294967295l, level 0l, verbosity 30l execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
EvaluateRequestForExecution – Updated current running request execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
MTC task with id {E512787C-ACB8-4135-957D-3514CBD407BF}, changed state from 4 to 5 execmgr 1/19/2022 11:21:18 AM 3172 (0x0C64)
Program exit code 1 execmgr 1/19/2022 11:21:18 AM 1712 (0x06B0)
Tough one without the script’s own log file. Hmm. Do you have anything configured, that could prevent this from running? You mentioned it worked on some of your devices, but not the one outside of your team. Is it intentional that you don’t configure -ExecutionPolicy Bypass? Does other PowerShell scripts run fine on all devices as well?
Hi,
Toast notification for informing user and allow to snooze for some time before runinng complicated task sequence. Any ideas how to ….?
The toast notification itself can’t do anything automatically for you, but you can have the action button to launch a task sequence and you can allow to snooze the toast notification as well, you just can’t have the toast notification automatically do something for you. The user has to click the buttons.
I keep getting this error, running script under user rights as a package via sccm CB against Windows 11 machine. Intermittent. Sometimes it works fine, others…
________________________________________
VERBOSE: Running supported version of Windows. Windows 10 and workstation OS detected
VERBOSE: Script is initially running in USER context
VERBOSE: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
Write-Log : No config file found on the specified location [locally or fileshare]
At C:\WINDOWS\ccmcache\k\New-ToastNotification.ps1:1623 char:9
+ Write-Log -Level Error -Message “No config file found on the …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Write-Log
[process exited with code 1]
Where should this script be copied “locally”? the fileshare has everyone has read & execute rights.
thanks
Looks like there’s intermittent issues with access to the config file? No other way to explain it I guess. Have you considered keeping the config.xml in the package with the New-ToastNotification.ps1 file instead, to remove the dependency of accessing the file share? 🙂
i’ve checked and double checked and now it never works, same error. I’ve spent too much time troubleshooting this script. thanks anyways
this was the result of a time difference between the SCCM server and the DC. Resolved and script is working as designed. thx
Thank you!
the PS1 and the XML are both in the CCMCACHE directory which is mentioned in your log file (C:\WINDOWS\ccmcache\k) and in the source folder where the script and xml file was originally placed.
Where should the local copy of the xml files be housed? C:\Users\\AppData\Roaming\ToastNotificationScript is the folder i am guessing and the PS1 and xml file are there already.
Why do I I keep getting this error? I don’t see any documentation on how to set custom app to false.
ERBOSE: Running supported version of Windows. Windows 10 and workstation OS detected
VERBOSE: Script is initially running in USER context
VERBOSE: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
VERBOSE: Successfully loaded .\config-toast-rebootpending.xml
VERBOSE: Loading xml content from .\config-toast-rebootpending.xml into variables
VERBOSE: Successfully loaded xml content from .\config-toast-rebootpending.xml
Write-Log : Error. Conflicting selection in the .\config-toast-rebootpending.xml file
At C:\temp\Toast_notification\New-ToastNotification.ps1:1805 char:5
+ Write-Log -Level Error -Message “Error. Conflicting selection in …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Write-Log
Write-Log : Error. You can’t have both SoftwareCenter app set to True AND CustomNotificationApp set to True at the
same time. Check your config
At C:\temp\Toast_notification\New-ToastNotification.ps1:1806 char:5
+ Write-Log -Level Error -Message “Error. You can’t have both Softw …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Write-Log
You have 3 options in regards to what app is doing the notification. Only one can be used. So if you want software center to be the notifying app, you disable powershell and the custom app. (only one can be set to true)
I saw your response in another post that said we can not run a script from inside the new-toastnotification.ps1 file.
would this work?
I would like to call your script, new-toast notification from inside another script that when a specific button is pressed, it will complete an action.
Can the buttons be configured to return a specific exit code that can then be used inside the wrapper script to execute a command?
Some feedback for you.
It would make more sense to have a single XML file, and allow multiple options to all be checked and trigger various (possibly multiple toasts) without the need to deploy multiple versions of the script/xml to endpoints. It would be really nice to have an all in one configuration to check account password, pending reboot, and uptime all in one go, and display the appropriate notifications without needing 3 separate XML files & deployments to do so.
Another improvement would be to only use the True/False on enabling the notifications themselves, not the texts to be displayed. For example, if I’ve selected True for PendingRebootUptime, it should just assume PendingRebootUptimeText is true & should have something in it (along with all the other associated options as well). The only thing I can see having additional True/False on would be turning buttons like Snooze on and off.
Lastly if a text such as Text Name=”AttributionText” has been left blank, it should not throw an error. Instead script should assume to just leave that out of the notification.
Looking forward to the next release, hopefully with some of these quality of life improvements.
Oh another I thought of at the last minute. How is a standard user to check the pending reboot registry keys? They do not have access to those keys without elevated / admin permissions on the workstation. So these notifications never display when the script is run in the context of the user.
The Test-PendingRebootRegistry function does not require admin privileges to simply query the registry values. Nothing in the script does that. 🙂
Thank you for the feedback. Much appreciated. I’ll take them into consideration. 🙂
Hi,
We love to work with the toast it is really great.
We face off an issue to run application (User-Available) with the toast.
It works great with the AppID (Scope_xxxxxxxx) when application is device targeted or user when is required. But when application is user available, we see it in the Software Center but not in WMI (CCM_Application class).
Already read a lot of post on the web but nobody has an answer about this topic.
Did you have an idea to perform installation of an application (User-Available) with the toast ?
Thanks in advance for your help.
Kind regards.
Arthur Dalpiaz from D’Ieteren in Belgium.
Hi Martin
Just saying what everybody already said: I love this!
I’ve implemented the reboot and windows upgrade function of your script without much hassle and so far, everything works as expected 🙂
Not sure if this is the right location to ask, but can your script be adjusted to trigger a toast on a certain event? (eg. applocker?)
For the moment I’m using burnttoast for this, but it would be convenient by using yours 😉
Keep up the good work and I’m looking forward for newer releases.
where do i get the “Windows 10 Toast Notification Script Reboot Protocol.msi” file from. It’s no longer in the 2.3 folder, but used to be in the 2.1. Without it, the script doesn’t reboot when user hits reboot. thanks
Those custom scripts is created by the New-ToastBotificationScript.ps1 itself via the CustomScriptsandProtocol option in the config.xml 🙂
Hi Martin,
Do you give support for the Toast please? with remuneration?
bst regards
What kind of support do you need? 🙂
I am actually greatly enjoying using this script for all sorts of things, particularly user initiated software deployments, but most of all I am enjoying using it to both harass and humor users with the audio function. This is particularly useful in a high density laptop, remote work environment. Kicking these off at 6:30 PM with a “While you’re enjoying dinner, I still haven’t been rebooted in a week” has hilarious results. And guess what, the user hits reboot rather than dismiss.
The only two things I’d like to know, and or wish to be implemented:
1) Would there be a way to use the user’s name, or the uptime, or any other variable a part of the audio function? That would be next level.
2) Anybody figure out a way to call a Company Portal app directly via a protocol handler. I figured out the one that can get the toast to open company portal *to* the app page, but the user still has to click the install button.. I can’t figure out what the button url/handler is.
That’s some great suggestions. Regarding question 2, I’m haven’t been able to find any information on how to do this I’m afraid.
Hello,
Any idea why this happen?
I use the precache and precache-install TS to upgrade from 1909 to 21H2.
I still run after so many errors.
Start executing an instruction. Instruction name: ‘Test Readiness Failure’. Pointer: 15. Type: ‘SMS_TaskSequence_PrestartCheckAction’. Disabled: 0
Set a global environment variable _SMSTSCurrentActionName=Test Readiness Failure
The action (Test Readiness Failure) has been skipped because the condition is evaluated to be false
Execution of the instruction (Test Readiness Failure) has been skipped
Start executing an instruction. Instruction name: ‘Readiness Failed’. Pointer: 21. Type: ”. Disabled: 0
Set a global environment variable _SMSTSCurrentActionName=Readiness Failed
The group (Readiness Failed) has been skipped because the condition is evaluated to be false
Execution of the instruction (Readiness Failed) has been skipped
Start executing an instruction. Instruction name: ‘Test PreCache Failure’. Pointer: 35. Type: ‘SMS_TaskSequence_RunCommandLineAction’. Disabled: 0
Set a global environment variable _SMSTSCurrentActionName=Test PreCache Failure
The action (Test PreCache Failure) has been skipped because the condition is evaluated to be false
Execution of the instruction (Test PreCache Failure) has been skipped
Start executing an instruction. Instruction name: ‘PreCache Failed’. Pointer: 51. Type: ”. Disabled: 0
Set a global environment variable _SMSTSCurrentActionName=PreCache Failed
The group (PreCache Failed) has been skipped because the condition is evaluated to be false
Execution of the instruction (PreCache Failed) has been skipped
Thank you so much
Elshaday
Hi Martin,
Any idea for this please?
Failed to open to WMI namespace ‘\\.\ROOT\CIMV2’ (80040154)
Failed to connect to WMI namespace \\.\ROOT\CIMV2 (Code 0x80040154)
Failed to find property ‘AutoApplyDeployment’ in ‘CCM_ApplicationManagementClientConfig’ class definition. Error 0x80041002. Default value will be used for this property
Parsing step node: Test Readiness Failure
Parsing group node: Readiness Failed
Parsing step node: Set ReadinessStatus Failed
Operand Path=z:\%computername%\ReadinessFailed
Parsing step node: Readiness Failed
Parsing step node: Test PreCache Failure
Parsing group node: PreCache Failed
Parsing step node: Set PreCacheStatus Failed
Operand Path=z:\%computername%\PreCacheFailed
Parsing step node: PreCache Failed
Parsing step node: Set CompatScanStatus Failed
Parsing group node: OS Compat Scan Failed
Parsing step node: Set OS CompatScanStatus Failed
Operand Path=z:\%computername%\CompatScanFailed
Parsing step node: CompatScan Failed
Failed to create an instance of COM progress UI object. Error code 0x8000401a
Thanks
Daniel
config-toast-osupgrade.xml
Is it possible to execute a exefile when Install now
is triggered?
Love this script. I am trying to utilize it to prompt my users to take a survey. The issue I am having is that I dont want to open the site in the default browser as the website is not supported in IE. Most machines do not yet have edge installed and are instead installed with Chrome.
Is there anyway that I can set an action to specifically open Chrome? Or possibly run a .bat from an action?
Any input is greatly appreciated, Thank you.
can someone help me how to configure a toast notification with 2 buttons
1. with costume action (script that ill provide)
2. snooze button (i decide how many are allowed)
Is this page still being moderated?
Can I prompt chrome specifically instead of Default browser or edge?
Good Job.
its possible change side font
TitleText
BodyText1
BodyText2
Thank you a lot
Regards
Hello, I’m afraid not. There’s no way to customize the fonts. This is entirely handled by the OS itself and the theme you use in Windows (if any).
Hey!
Very nice script!
I got a problem with the Scenario.
Using Version 2.3.0
When its set to reminder and no enabled buttons at all its displayed for 15 seconds. Then it just vanishes from the notification center. When buttons are present its not vanishing and you have to actively press something. (Thats basically what i would want from “reminder”)
When its set to “short”, “long” or “alert”, its vanishing after 15 sec (on all 3) regardless if there are any buttons enabled or not. It’s just gone. I would have expected the same behavior like “reminder”, the only difference being displayed for a shorter time AND still being visible in the notification center.
Is this only happening for me?
How can I prompt Chrome specifically from this script? is that possible?
Or only default/MS edge?
Thank you
Jimbo
Take a look at my most recent answer to your most recent question 🙂
Can I open a different browser than default or Edge with the action buttons?
What about running a .bat file?
I really just want to be able to open chrome specifically.
I actually don’t know. This is not directly related to the script. The script is based on a framework, which is able to launch protocol based actions, like https://yadayada. The OS then knows, that this protocol is associated with your default browser. The OS is then opening your default browser, not the script.
Running a .bat file is possible. That’s what I do for all of the custom actions, like rebooting the device or launching a task sequence in the Software Center.
Using toast to upgrade to 21H2 (19044).
However the “” is not working, and users are still seeing Toast notification after successful upgrade.
to mitigate, I have added excluded 19044 collection from the toast notification, but there is latency. Would be better if the option in the XML was working as intended.
Thoughts?
Have you tested that specifically and correctly? if I run the toast with the UprgadeOS option enabled and the TargetOS is configured properly, the toast is not shown if the OS the script is running on, is matching that configured in the TargetOS option.
Good day sir,
love your work. One question. I am building a toast notification to let people know their drivers are outdated and allow them to install with a click of a button. Now I would love to build a counter for the dismiss button. If they dismiss like five times, the drivers would install. Is there any way to add logic to the dismiss button? Maybe like a short powershell script…or add increments of +1 to a registry key value etc..Thank you!
This script has been amazing! I’m running into an issue today though with the RunApplicationID.
I can see in the log file that the script sees it. The toast will launch but when you press the Upgrade Now button, I get a pop up box with Windows wanting to know how to open the file.
Any thoughts?
Hm, sounds like the custom protocol somehow has been deleted?
Doe you have any entries here?: Computer\HKEY_CURRENT_USER\Software\Classes\ToastRunApplicationID\shell\open\command
And does the entry point to the script in appdata\toastnotificationscript\Scripts?
Hi there, I am trying to run the toast script but either running from a network share or local it errors out with Cannot convert value “system Object[]” to type “system.Xml.XmlDocument” error “An error occurred when parsing Entity Name . Line 49, position 136.” same when I run form a network share or just the .\New-ToastNotification.ps1.. Any idea what can bet= the cause of this?, I have fully deleted it off a couple of times and redone new and still the same :(. Hope you can advise 🙂 Thanks Robert
Love the script. Running the powershell command manually works as expected. When I deploy via SCCM it just shows a condensed message that says powershell and doesn’t show the actual full message, it doesn’t contain any details, just says powershell.exe notification. Below are the logs but they say successful. Any help appreciated.
2022-04-26 13:20:07 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2022-04-26 13:20:07 INFO: Script is initially running in USER context
2022-04-26 13:20:07 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2022-04-26 13:20:07 INFO: Successfully loaded \\fullnetworklocation\config-toast-adpwexpiration.xml
2022-04-26 13:20:07 INFO: Loading xml content from \\fullNetworklocation\config-toast-adpwexpiration.xml into variables
2022-04-26 13:20:09 INFO: Successfully loaded xml content from \\fullNetworklocation\config-toast-adpwexpiration.xml
2022-04-26 13:20:09 INFO: Toast notification was previously displayed 22 minutes ago
2022-04-26 13:20:09 INFO: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
2022-04-26 13:20:09 INFO: Script version: 2.3.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols
2022-04-26 13:20:09 INFO: ADPasswordExpiration set to True. Checking for expiring AD password
2022-04-26 13:20:09 INFO: Running Get-ADPasswordExpiration function
2022-04-26 13:20:09 INFO: Looking up SamAccountName and DomainName in local Active Directory
2022-04-26 13:20:10 INFO: SamAccountName found: test and DomainName found: xxxxx.net. Continuing looking for AD password expiration date
2022-04-26 13:20:10 INFO: Password expiration date found. Password is expiring on 06/24/2022 13:28:30. Calculating time to expiration
2022-04-26 13:20:10 INFO: Password is expiring within the set period. Returning True
2022-04-26 13:20:10 INFO: ADPasswordExpirationDays is set to: 90
2022-04-26 13:20:10 INFO: Greeting with given name selected. Replacing HeaderText
2022-04-26 13:20:10 INFO: Greeting with Good afternoon
2022-04-26 13:20:10 INFO: Running Get-GivenName function
2022-04-26 13:20:10 INFO: Given name retrieved from Active Directory: Test
2022-04-26 13:20:11 INFO: Creating the xml for no action button
2022-04-26 13:20:11 WARNING: Conditions for displaying toast notifications for UpgradeOS are not fulfilled
2022-04-26 13:20:11 WARNING: Conditions for displaying toast notifications for pending reboot uptime are not fulfilled
2022-04-26 13:20:11 WARNING: Conditions for displaying toast notifications for pending reboot registry are not fulfilled
2022-04-26 13:20:11 WARNING: Conditions for displaying toast notifications for pending reboot WMI are not fulfilled
2022-04-26 13:20:11 INFO: Toast notification is used in regards to ADPasswordExpiration. ADPasswordExpirationResult returned True
2022-04-26 13:20:11 INFO: Confirmed USER context before displaying toast
2022-04-26 13:20:11 INFO: All good. Toast notification was displayed
Hm, are you running the new-toastnotification.ps1 from a network share? You are welcome to take this offline with me on mab@imab.dk and include some screenshots of your config in configmgr as well as the output when running it from configmgr. Thank you.
Just read this looking for more info – this is the same problem I am having now.
Hello Together,
is it possible to kill a process (running exe) with an Action Option? Just to click Action Button 1 and this kills the exe? Maybe with a Powershell command? If yes, how can it be done?
Best regards,
Alex
Yes, that would be possible. It would be similar to any of the other actions: Create a customprotocol which will launch a .cmd file or powershell script, which in return will kill the process for you.
I created a new custom.ps1 file and placed it to ProgramData\ToastNotificationScript and added a new entry to: HKEY_CLASSES_ROOT\custom as described here: https://www.imab.dk/windows-10-toast-notification-script-update-personal-greeting-and-protocol-based-reboot/. I could not find the Windows 10 Toast Notification Script Reboot Protocol.msi on GitHub to Download, could you please describe in detail how to do it?
Best regards
Hello Martin,
I’ve configured the config-toast-osupgrade.xml and ran the New-ToastNotification.ps1 -Config .\config-toast-osupgrade.xml.
Didn’t receive any errors in the log, only two warnings. The problem is that the toast doesn’t pop up.
Here is the log. I don’t know what else to check or modify.
2022-05-05 17:36:46 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2022-05-05 17:36:46 INFO: Script is initially running in USER context
2022-05-05 17:36:46 INFO: Toast notifications for the logged on user are enabled in Windows
2022-05-05 17:36:46 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2022-05-05 17:36:46 INFO: Successfully loaded .\config-toast-osupgrade.xml
2022-05-05 17:36:46 INFO: Loading xml content from .\config-toast-osupgrade.xml into variables
2022-05-05 17:36:49 INFO: Successfully loaded xml content from .\config-toast-osupgrade.xml
2022-05-05 17:36:49 INFO: Toast notification was previously displayed 15 minutes ago
2022-05-05 17:36:49 INFO: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
2022-05-05 17:36:49 INFO: Script version: 2.3.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols
2022-05-05 17:36:49 INFO: RunPackageID set to True. Will allow execution of PackageID directly from the toast action button
2022-05-05 17:36:49 INFO: Running Write-PackageIDRegistry function
2022-05-05 17:36:49 INFO: PackageID: PRI0028A was found in WMI as deployed to the client
2022-05-05 17:36:49 INFO: Writing the PackageID to registry
2022-05-05 17:36:49 INFO: DynDeadlineEnabled set to True. Overriding deadline details using date and time from WMI
2022-05-05 17:36:49 INFO: Running Get-DynamicDeadline function. Trying to get deadline details from WMI and ConfigMgr
2022-05-05 17:36:49 INFO: RunPackageIDEnabled is True. Trying to get deadline information based on package id
2022-05-05 17:36:49 INFO: PackageID retrieved. PackageID is: PRI0028A. Now getting deadline date and time
2022-05-05 17:36:49 INFO: Deadline date and time successfully retrieved from WMI. Deadline is: 05/11/2022 11:00:00
2022-05-05 17:36:49 INFO: Greeting with given name selected. Replacing HeaderText
2022-05-05 17:36:49 INFO: Greeting with personal greeting: Good evening
2022-05-05 17:36:49 INFO: Running Get-GivenName function
2022-05-05 17:36:49 INFO: Given name retrieved from Active Directory: Krasimir
2022-05-05 17:36:49 INFO: Creating the xml for action button and dismiss button
2022-05-05 17:36:49 INFO: Creating the xml for displaying the second action button: actionbutton2
2022-05-05 17:36:49 WARNING: This will always enable both action buttons and the dismiss button
2022-05-05 17:36:49 WARNING: Replacing any previous formatting of the toast xml
2022-05-05 17:36:49 INFO: Toast notification is used in regards to OS upgrade. Taking running OS build into account
2022-05-05 17:36:49 INFO: Confirmed USER context before displaying toast
2022-05-05 17:36:49 INFO: All good. Toast notification was displayed
Best regards and thanks in advance.
Krasimir
Hello,
Just found that “focus assist” was enabled.
Had to turn it off and the toast popped up.
BR
Krasimir
Just started working with your script and it looks great, I’ve got a working version of the uptime exceeds x days and pending restart working. Trying to get the OS upgrade portion to work, it is doing the toast notification but when clicking the ‘Install’ button a command window flashes for a moment and then nothing else happens. Here is what I’m seeing in the log –
2022-05-13 10:40:26 INFO: Script Started
2022-05-13 10:40:26 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2022-05-13 10:40:26 INFO: Script is initially running in USER context
2022-05-13 10:40:26 INFO: Toast notifications for the logged on user are enabled in Windows
2022-05-13 10:40:26 INFO: Specified config file seems hosted [locally or fileshare]. Treating it accordingly
2022-05-13 10:40:26 INFO: Successfully loaded C:\Program Files (x86)\xxx\UserToastNotifications\config-toast-uptime.xml
2022-05-13 10:40:26 INFO: Loading xml content from C:\Program Files (x86)\xxx\UserToastNotifications\config-toast-uptime.xml into variables
2022-05-13 10:40:27 INFO: Successfully loaded xml content from C:\Program Files (x86)\xxx\UserToastNotifications\config-toast-uptime.xml
2022-05-13 10:40:27 INFO: Toast notification was previously displayed 4 minutes ago
2022-05-13 10:40:27 INFO: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
2022-05-13 10:40:27 INFO: Script version: 2.3.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols
2022-05-13 10:40:27 INFO: RunUpdateID set to True. Will allow execution of Software UpdateID (KB-article number) directly from the toast action button
2022-05-13 10:40:27 INFO: Running Write-UpdateIDRegistry function
2022-05-13 10:40:27 INFO: Running Get-CMUpdate function
2022-05-13 10:40:27 INFO: Found update that matches UpdateID: 5003791 and name: Feature Update to Windows 10 Version 21H2 x64-based systems 2021-11 via Enablement Package
2022-05-13 10:40:27 INFO: Get-CMDUpdate was successfully run and UpdateID was retrieved
2022-05-13 10:40:27 INFO: Writing the UpdateID to registry
2022-05-13 10:40:27 INFO: Greeting with given name selected. Replacing HeaderText
2022-05-13 10:40:27 INFO: Greeting with Good morning
2022-05-13 10:40:27 INFO: Running Get-GivenName function
2022-05-13 10:40:27 INFO: Given name retrieved from Active Directory: xxx
2022-05-13 10:40:27 INFO: Creating the xml for action button and dismiss button
2022-05-13 10:40:27 INFO: Creating the xml for displaying the second action button: actionbutton2
2022-05-13 10:40:27 WARNING: This will always enable both action buttons and the dismiss button
2022-05-13 10:40:27 WARNING: Replacing any previous formatting of the toast xml
2022-05-13 10:40:27 INFO: Toast notification is used in regards to OS upgrade. Taking running OS build into account
2022-05-13 10:40:27 INFO: Confirmed USER context before displaying toast
2022-05-13 10:40:27 INFO: All good. Toast notification was displayed
I’m specifying the KB in the following spot –
Based on the logs it appears to be checking SCCM policy on the endpoint, finding the KB and the name of the KB but just not starting the install process. Thoughts on what to look at next?
Thanks!
I’m specifying the KB in the following spot –
Hello, just downloaded the latest version from GitHub and change the “UseSoftwareCenterApp” to false as I’m getting a ” Cannot find any service with service name ‘ccmexec’.” error. The notification works fine but when I click Restart Now button, nothing happens. I don’t have any SCCM but I have an MDM so I was thinking to deploy it via script.
I think I found it.. I had to delete the registry key so it will push the new version. Thank you!
Hey there!
I dig this script, and I’ve been trying to modify it to just pop up a toast to notify our users that there will be automatic updates in the evening. I simply want it to say “Hi, your computer will update tonight, please leave your computer powered on and connected to the internet”. I built a new.xml file (called UpdateTonight) and I think I have all of the variables set up right. I also modified the RunToastHidden.cmd file to reflect the different filename, and I went through the New-ToastNotification.ps1 file to get it to see the new .xml file. I continually get the toast for Computer Uptime though, so there is something not right…
As I was going through the .ps1 another time, it looks like I need to create a new function for the .xml file I created, but since I am just starting out with learning PowerShell (I rely on masters on the internet) I don’t know how do do that.. I would try to modify another of the functions and files to do what I need, but they all grab info from other sources and I don’t want to mess anything up that needs to function.
Has any work been done on simple notifications to the user? I don’t need action or delay buttons, and I don’t need it to reference any other applications. I just want it to pop up a notification on Thursday afternoons that there will be an update that evening.
Thanks in advance!!
When a TOAST is presented for a user they have the opportunity to disable notifications from Software Center by clicking on the three dots left to the X “exit button” and choose to disable notifications from Software Center
That sets:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SoftwareCenter.DesktopToasts /v Enabled to 0
IF I change that to 1 and run it in as current logged on user (same as the one that disabled it) it changes :
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Notifications\Settings\Microsoft.SoftwareCenter.DesktopToasts /v Enabled to 1
and I can see that the button is enabled again to show notifications from Software Center
and the logfile says “VERBOSE: All good. Displaying the toast notification”
BUT IT ISN’T DISPLAYED (not even after reboot)
The user now has to first disable it again manually in “Notifications & Actions” and then enable it manually
Now it works and the TOAST shows up again
What shall I do to prevent users from disabling Software Center in “Notifications & Actions” or prevent them from clickin on the three dots … in the upper right corner of the TOAST?
See my latest release on this exact issue. If you let the toast notification script create a custom notification app, the user won’t be able to disable notifications using the three dots. 🙂
Hey Martin,
I’ve created an SCCM package as per your description, deployed it to a test collection as required and to run as soon as possible with “always rerun” behavior selected. The files were downloaded, but then nothing happens – no toast, no log, nothing.
When i run the New-ToastNotification.ps1 -Config .\config-toast-osupgrade.xml manually, everything is working fine and the log was created. “Focus assist” is set to show all notifications.
I don’t have a clue what could be the problem.
Best regards
What does your commandline for the package and program looks like? Have you made any other custom changes?
Hey Martin,
I just found a typo in the command line, now everything is working as expected.
Thank you 🙂
Hello. I have same problem, manual working good, but from SCCM nothing happends. Pleas can you tell what are you changing to work?
Hello
Thanks for your script, it works great when launched for local user.. but I’ve been unable to display toasts over lock screen (the setting to allow notifications on the lock screen is enabled)
I’ve launched the script in debug mode, but the only (relevant) info I get is:
2022-06-16 18:17:17 INFO: Running supported version of Windows. Windows 10 and workstation OS detected
2022-06-16 18:17:17 INFO: Script is initially running in SYSTEM context. Please be vary, that this has limitations and may not work!
…
2022-06-16 18:17:18 INFO: Script version: 2.3.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols
…
2022-06-16 18:17:19 INFO: Confirmed SYSTEM context before displaying toast
2022-06-16 18:17:19 ERROR: Something went wrong when displaying the toast notification
2022-06-16 18:17:19 ERROR: Make sure the script is running as the logged on user
By catching the Error in the try/catch, I’ve found that the error I get in the exception is:
“Notification Platform unavailable” (translated)
any idea? 🙂
Thanks
The script really need a user’s context. When launching in system context, it’s essentially emulating the logged on user. Do you have a logged on user in your scenario? 🙂
Hi Martin.
Yep, you’re right, it works perfectly on the Lock screen (since there’s an user logged on) but of course before logon only Local System is running the secure desktop.
My context: I would want to prevent users from logging on if something (i.e. Office) is being installed by Local System. Afaik, in W10 there’s no way of preventing users from logging in (apart from removing LogonUI, but this seems too drastic) so at least I would want to warn users that an update is running and wait for it to finish before logging on.
I’ve recently read that, in theory at least, this can be done:
http://web.archive.org/web/20150505112059/http://calebdelnay.com/blog/2012/01/displaying-a-program-on-the-windows-secure-desktop
do you think this could be working?
Hello!
I am running task sequence to update Dell drivers. It works with your toast notification. Users can install it with “Install” buttom or dismiss with “dismiss buttom. The toast notification is deployd with regular SCCM package. My issue is that the toast notification appears even the the task Sequence is installed. How can i avoid the tost notification to run again?
Thanks in advance
I’d design the collections you use around that. As in only having the collection you use for deployment of the toast, to only contain devices which have NOT yet run the task sequence. Once the task sequence has run on a device, the device should move out of the collection in question.
You can do this really easy, by leaving some sort of trace on the device if the task sequence ran successfully. It could be by tattooing the registry, leave a file or if you already have some sort of common denominator like an installed application in a specific version. By putting the devices which ran the task sequence successfully in a collection on their own, you can exclude this collection from the collection you use for deployment of the toast, and based on your hardware inventory cycle, the devices will move out of the collection and no longer have the toast notification targeted as an deployment.
Does that make sense? 🙂
Does anyone know how to query the MP to retrieve user based available deployments in powershell?
I’ve found that user based available software is not listed on the client device but user based required is.
At the present the powershell script doesn’t work with user based available deployments.
Hello, I’m using the PACKAGE option for Action Button1 and its working perfectly but we do not want software center to launch, is there somewhere in the script I can comment out so Software Center does not launch for the user?
I’m using this for the Action below:
thanks
Hello, yes that would be doable if you edit the custom action script. The one you are interested in particularly is the script: ToastRunPackageID. You can edit out: Start-Process -FilePath “$env:windir\CCM\ClientUX\SCClient.exe” -ArgumentList “SoftwareCenter:Page=OSD” -WindowStyle Maximized
Hello Martin,
There is req to log which button user clicked in log file. How we can get whether user clicked on snooze button or dismiss button.
Hi Martin,
Can your solution be used for Application Groups deployments notification?
Thanks.
Never mind, it works when App Group is deployed as required. Not sure why it doesn’t see it in WMIs when it’s available.
Hello. Our users do not have local admin rights on their systems. Do any additional steps need to be taken in this case?
No, the script does not require the user to be local admin 🙂
Martin,
Having a strange issue where script runs but says config file is not present. (It is.) SCCM Package and program are correct according to docs. SCCM is latest release; wondering if that has something to do with it?
Update:
I fiddled with the application deployment settings, and am getting the toast. It’s not, however displaying anything other than the basic box (no imagery / extra text). I have noticed this happens when the script is not actually being run locally from the endpoint, which, by checking the box to indicate source files, should be copied and ran locally. Any ideas?
First, thanks for this great tool. Second, I am using it to push out a citrix package. When you click the “Install now” button it starts the install and pops open software center, however, it opens to the “Operating System” tab. It there any way to get it to open in the applications tab? Thanks.
Martin, first, great program and thanks for the efforts to create it. Second, I am using it to push out a citrix workspace upgrade.
But when clicking the “Install now” button, it opens software center and starts the install, however, it opens to the Operating System tab. Is there anyway to get it to open in applications tab so they can see it is being installed? Thanks.
Another issue I am running into with my testing is that the toast notification will just randomly stop popping up. Not in the notifications area, no pop-up, just gone and does not come back. Ever experienced that? Thanks.
Matthew
This was my fault. I did not set the scheduled task to run every “X” minutes/hours.
A new symptom that has just randomly popped up. It just stopped running anything from the “Install Now” button. No errors or anything, just does not run. I get a popup cmd window (so I can see whats happening) that it is running ToastRunPackageID.ps1 but nothing happens. The only thing different is that I have enabled Allsign and applied a cert to New-ToastNotification.ps1. Any ideas would help. Thanks.
If you see the cmd windows shortly and knows the ToastRunPackageID.ps1 is running as well, then the toast notification does everything that’s required of it. Does the newtoastnotification.log indicate that the packageid is found? What happens if you run ToastRunPackageID.ps1 manually?
Hello and first, thanks a lot for this great job !
My question is regarding the password expiration part.
I tried to change de config-toast.xml conf and I turned the password notification on and other off but the toast still displays the windows update reboot message…
I am certainly doing something wrong and I would like your help.
Thank you
Jeremy
So many great features in this latest release.
However, I have removed all of the lines with this:
if (Test-Path -Path “$env:windir\CCM\ClientUX\SCClient.exe”) { Start-Process -FilePath “$env:windir\CCM\ClientUX\SCClient.exe” -ArgumentList “SoftwareCenter:Page=OSD” -WindowStyle Maximized }
and it’s STILL opening up Software Center.
Thoughts?
hmm, opening the Software Center is strictly done from within the custom scripts. Are you sure you removed it from within the new-toastnotification.ps1 as well, from all the custom scripts?
Hello everyone,
First, thank for this beautiful scripts.
I need help regarding the password notification part.
I tried to enable only the password notification part but when the toast window appears, it asking to reboot the pc and it doesn’t speak about the password reset.
Can you tell me what I did wrong ?
Thanks a lot
Jeremy
Sounds like your config-toast.xml is off and is not configured in regards to expiring passwords, but the reboot option instead. Take a look at the included config.xml samples in the download.
Hello Martin Bengtsson
I am new here and beginning to computer technologies. Thanks for the best work. I have a question! There are the way to change the background image, let it only one color or put the another image inside? I say not “LogoImageName” and “ToastLogoImageDefault.jpg” but the full image. I would like to use like campaign information in the hospital.
Thanks a lot
Jardel
Windows 10 Toast notification via Powershell / SCCM Script
Apologies if I have misunderstood but was hoping to use Toast for “outage notfications” to our EMEACIS based network but you are limited to the 15 minutes run time on SCCM
I have created basic templates and was trying to invoke them by running a script … running the command line from the user pc works but running against the device doesn’t …
This is the command im running – “%Windir%\system32\WindowsPowerShell\v1.0\powershell.exe” -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden C:\Windows\System32\Toast\Toast_Notify.ps1
any thoughts – 🙂
How do you control how long the notification stays up on the screen?
I have been using this script to notify users when their computers have not been restarted for X number of days so much appreciated.
Has anyone been able to add a notification audio? or can anyone tell me how to do it?
Anybody know how to add sound to the notification?
This is pretty neat stuff -nice to drive all this by an XML. Is there a way to stop the toast notification from vanishing if you click within it? We have the “dismiss” button but the notification still vanishes once the form is clicked.
Bonjour.
Comment cela s’interface-t-il avec SCCM, en particulier dans une Task Sequence?
Salutations
Hello Martin,
Thank you very much for this awesome script !
I have this implemented in our 30000+ client environment with the reboot option and it works absolutely perfect ,
we have received great feedback from our users and management and also it has increased the update compliance significantly since this was implemented as we did not have a force reboot set in place.
In my setup I have an action button set to “Restart now” (if pressed will trigger a reboot) the and the “Dismiss” button that will make the toast go away until the program is run again via SCCM ( have this set to run twice a day at 9am and 3pm).
I would like to take the toast reboot notification to the next level …and have a couple of questions please.
Is there a way to log the number of times the “Dismiss” button is being pressed?
And also how can we trigger an automatic restart ?
Any suggestion will be very much apreciated
Many thanks!
Julian
Hello Martin,
Just wanted to share an improvement that I have added to the script under the “Create Pending Reboot function for registry”
# Create Pending Reboot function for registry
function Test-PendingRebootRegistry() {
Write-Log -Message “Running Test-PendingRebootRegistry function”
$CBSRebootKey = Get-ChildItem “HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending” -ErrorAction Ignore
Write-Log -Message “CBSRebootKey: $CBSRebootKey”
$WURebootKey = Get-Item “HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired” -ErrorAction Ignore
Write-Log -Message “WURebootKey: $WURebootKey”
$WURebootKeyUX = (Get-ItemProperty -Path “HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\StateVariables” -Name RebootRequired -ErrorAction Ignore).RebootRequired
Write-Log -Message “WURebootKeyUX: $WURebootKeyUX”
$FileRebootKey = Get-ItemProperty “HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager” -Name PendingFileRenameOperations -ErrorAction Ignore
if (($CBSRebootKey -ne $null) -OR ($WURebootKey -ne $null) -OR ($WURebootKeyUX -eq 1)) {
Write-Log -Message “Check returned TRUE on ANY of the registry checks: Reboot is pending!”
$true
} else {
Write-Log -Message “Check returned FALSE on ANY of the registry checks: Reboot is NOT pending!”
$false
}
}
Hope this will come in handy 🙂
All the best !
Julian
Hello
Thank you for these great scripts.
I am currently deploying an Update W11 21h2 feature, with an sccm task sequence via the software center. and I would like to know how to implement toas notifications in this TS.
Cheers
PJ
Hello
Thank you for these great scripts.
I am currently deploying an Update W11 21h2 feature, with an sccm task sequence via the software center. and I would like to know how to implement toas notifications in this TS.
Cheers
PJ
This script is a monster 🙂 Wow, excellent work with so many learnigs, thank you very much.
Currently I’m dealing with wrong reported uptimes due to the ‘fast startup’ option (https://www.winhelponline.com/blog/incorrect-uptime-taskmgr-wmi-refresh/). So the only thing I see, is to diable the ‘fast startup’ option. Which I guess is a good idea in managed enviroments anyway.
Do you have any other idea how to deal with this?
Yeah, disable fast startup in the enterprise. 🙂
Would disabling Fast Startup in Enterprise be the general recommendation from Microsoft as well? In link, https://learn.microsoft.com/en-us/troubleshoot/windows-client/deployment/updates-not-install-with-fast-startup they claim that this have been addressed in MEMCM 2002 but in what way is hidden in darkness, or?
What is your previous answer based on? Own experience, MS recommendations?
Wrote this when researching something else.
Maybe it will help you.
$CSInfo = Get-ComputerInfo
$CSInfoFiltered = $CSInfo | Select-Object @{Label=’System Name’;Expression=’CsName’},@{Label=’OS Name’;Expression=’OsName’},@{Label=’OS Edition’;Expression=’OsOperatingSystemSKU’},@{Label=’OS Version’;Expression=’OsVersion’},@{Label=’Serial Number’;Expression=’BiosSeralNumber’},@{Label=’Bios Version’;Expression=’BiosSMBIOSBIOSVersion’},@{Label=’Domain’;Expression=’CsDomain’},@{Label=’Model’;Expression=’CsModel’},@{Label=’Processor Family’;Expression=’CsProcessors’},@{Label=’OS Install Date’;Expression=’OsInstallDate’},@{Label=’Boot Time’;Expression=’OsLastBootUpTime’}
$CSInfoFiltered
Write-Host “Press Any Key to Finish”
$HOST.UI.RawUI.ReadKey(“NoEcho,IncludeKeyDown”) | OUT-NULL
$HOST.UI.RawUI.Flushinputbuffer()
Hi there! I`m trying to deploy this as a remediation following a detection for users who do not have WHfB setup.
When calling the script in this way it works
.\New-ToastNotification.ps1 -config “https://static.staticsave.com/windowshello/config-whfb.xml”
However if I try run it through the actual PS script like this
param(
[Parameter(HelpMessage=’Path to XML Configuration File’)]
[string]$Config = “https://static.staticsave.com/windowshello/config-whfb.xml”
)
it does not work and gives many errors, not sure if I am doing something wrong and would appreciate your feedback!!
Also – I would prefer to call the XML through a network shared drive, rather than having it hosted online!
When you click anywhere on the toast notification, it dismisses it. Is there a way to make the toast notification stay active until a selection is made?
Hello.
I can’t launch the toast via an SCCM task sequence. the toast does not launch …. however when I launch it manually, it works.
do you have an example of a task sequence that I can import into my sccm lab?
Cheers
Hi,
is it possible to rebuild this script to run without a config file and without pictures? We want to inform the user on demand in a emergeny issue. I found a script, but it doesnt work on W10 22H2.
Here the script: https://wetterssource.com/ondemandtoast
Any ideas?
Hey there
Thanks for this awesome script, it’s really helpful !!!
But i have a problem with the toast notification.
When the toast notification appears and you click somewhere in this window (expect on the lower part with reboot now / snooze timer), this will close the toast notification. The window then no longer appears, since the script is over and nothing gonna happen. Is there an option, that the toast notification only closes when you press the X?
Cheers
Phil
Hey Martin,
Great work!
I was wondering if you could point me in the right direction.
I created a script that checks for local folders that aren’t included in the OneDrive backup.
The user gets a notification which folders aren’t included.
Since users might get annoyed i would like to give them the option to disable this specific notification.
I tried creating a regedit key (to check earlier in the script) in the buttonaction, but the following goes wrong:
When for example there’s a website in the button action it only opens when the button is being clicked by the user.
When i change the buttonaction to creating a regedit key (or file for that matter) it doesn’t wait for the button, but runs whenever the script is being run.
I’m using intune btw with proactive remediation.
Thanks in advance,
Wouter
Great!
How did you use proactive remediation to run the New-ToastNotification.ps1 script with the config-toast-rebootpending.xml file?
Great work, really useful. Except… running as System to display the toast to a user. Doesn’t work for me. Dug into it a bit, and looks like the file “InvokePSScriptAsUser.ps1” is missing from the ZIP file download from your Github. Where do I get it from, or can you update the ZIP?
Ah… found that it’s created by the main script itself. However, I get this in the logs:
“VERBOSE: CreateScriptsAndProtocols set to True. Will allow creation of scripts and protocols
VERBOSE: Script version: 2.3.0 matches value of ScriptsAndProtocolsVersion in registry. Not creating custom scripts and protocols”
So, why is it not creating the custom scripts and protocols? Just because it’s version 2.3.0.?
We are using NinjaOne RMM. For patching, the reboot deferral of two prompts (each separated by 2 hours) does not have a final warning prompt after the second deferral prompt and the actual reboot. Can we use this toast script to provide users with a final reboot prompt in conjunction with NinjaOne as a force reboot after 2 hours for a user that won’t remember it is happening is not ideal.
Scenario:
Hour 1 – Reboot Prompt: User clicks deferral button
Hour 2 – Reboot Prompt: User clicks deferral button
Hour 3 – Prompt 1-2 minutes before with a final warning then a Reboot
Eg. “Your laptop is required to reboot to complete the installation of security updates. Please save your work as you have 2 minutes before the reboot occurs.
can we use this without sccm ?
I also curious that, if there is way to use in Task Scheduler?
Any suggestions on how to use this toast notification using KACE.
Can you please answer below points.
a)How this will be deployed?
(b) When this will be deployed?
(c) Frequency of the deployments?
(d) What are the criteria (or) categorized considered to identify machines?
(e) How the success & failures will be measured?
(f) what is the Low Level Design construct or PS Script and other deliverables?
How do I not use the images? I tried to rem that option out, but the images still show up.
Hi.
Any idea about how to get this to work om Windows 11 22H2?
This is such a great script. Is it possible to create a countdown timer? We have a 30-minute and a 10-minute notification informing the user their device is going to reboot. We would like to have a countdown timer come up with the 10-minute time notification.
Thanks
Mark
I’ve just implemented this and it works perfectly. I can add all PCs requiring a restart for Windows Updates to a group and deploy a message and it works! One question: how would I add a period after their first name in the greeting. ie “Good Morning, Robert” to “Good Morning, Robert.”
Thanks!
Any way to make an action button Schedule a time to restart?
hey mate, I have removed most functionality left (Get-GivenName, Test-WindowsPushNotificationsEnabled, Enable-WindowsPushNotifications, Display-ToastNotification, Write-CustomActionRegistry, Write-CustomActionScript, Register-CustomNotificationApp) and after that it is working on a Win11, Win10 22H2 but not working on a 21H2 machine for some reason. I mean the toast notification pops-up but none of the buttons work (besides dismiss). Do you have any clue why is that? Another not custom toast notification is working fine for some reason with an URI or URL link (using MSEdge). All registry entries are looking fine.
*correction: (left Get-GivenName….
+1 I wanted to use only ToastReboot functionality.
Hi Martin,
First of all nice script. Works like a charm. I’m currently using it to deploy an application where the install is user-driven. Toasts help a lot to involve user action.
The toast pops up on schedule, but the problem is that users that have already successfully installed the application also keep getting the toast.
Is there a way of preventing the toast popping up for an application that is already marked as installed in software center?
I don’t know if i missed this this in the documentation of if it’s a functionality that’s not included?
I’m using: RunApplicationID True, scrip version 2.3.0
how can I disable the “Restart Now” butten and have only “learn more and dismiss butten?
Hey
Is it possible to run a powershell script via Action1 button?
Hi,
Thank you for your sharing, I have download and run the script, it can showed the toast notification, but I have some question…
1. This script should I run after started Software Center from SCCM server?
2. If yes, I need to prepare a Software package to deploy this script to all users, right?
3. Or I just run the script once time only?
Thanks!
Stanley
Are there any known issues with adding the toast to a Task Sequence. Currently, I have to select Program can run: “Whether or not a user is logged on” which forces Run mode: “Run with administrative rights” otherise I do not get a Program selecting within the Task Sequence. However, from what I have read it should be Program can run: “Only when a user is logged on” with Run Mode “Run with user’s rights” but when this configuration is made I cannot select the Program in the Task Sequence.
How can i add a blob storage using SAS (Shared Access Signature) for the ToastLogoImage and ToastHeroImage?
When doing so, the xml is invalid and i will get an error:
Error message: Der Wert “System.Object[]” kann nicht in den Typ “System.Xml.XmlDocument” konvertiert werden. Fehler: “Unerwartetes Token ‘=’. Erwartet wurde das Token ‘;’. Zeile 26, Position 135.”
This means, it is expecting ‘;’ but instead the SAS consists of “weird” characters like =,?,&
Is there a recommended way to escape those?
I have an odd issue – pushed this out via SCCM and App Deploy toolkit. Created a scheduled task to launch the Toast notification. I have one user that the Toast notification log _says_ it launched just fine (from the New-ToastNotification.log) but the actual pop-up never showed. He gets other notifications, but not sure if they are legit Toast popups.
Where can I check to ensure the machine is configured properly to display Toast notifications? I’ve been looking at the PS code and checking registry entries, but can’t find anything on his machine that’s different from my machine.
HI,
the script is super but I can’t get it work with SCCM, can you please improve the documentation on how to configure it?
If I launch the script locally it works flawless (I replaced the images and removed the buttons since I just need to send warnings), but with SCCM I can’t get any result by creating a package.
If I launch the script from the UNC path of the SCCM server (. \\sccmserver\toastnotification\New-ToastNotification.ps1 -Config \\sccmserver\toastnotification\config-toast.xml) I can only get a simple notification without any content or image, it’s like it’s not reading any parameter.
Great tool! Is there any way that the dismiss button can be set to a specific number of times it’s allowed to be clicked? For instance, if it has been clicked three times the button becomes inactive and only the reboot now button can be pressed?
Hello Martin,
Thanks for the script. I am testing the script in my environment. In testing I set the MaxUptime as 7 days and deployed as sccm package which is scheduled to run everyday. But i can see the Notification everyday even if machine reboots today. So any idea how can we fix this or something i am not doing correctly?
How do we get this to work with Windows 11 22H2?
Where did the ToastReboot protocol go? I don’t see it in version 2.3…
Hm, I see it on line 786 as a part of the Write-CustomActionRegistry function. Later used on line 2042 to create the actual protocol in registry? 🙂
Hi, when a computer is unattended for a couple of hours, the messages keep piling up. Is there a solution that the script doesn’t run if the previous toast is still there? That would be great!
The users don’t like to click them all 😉
With kind regards
Hi there,
Is it possible to start the Install of an application directly from the Install button on the toast notification? For some reason I cant seem to get that work. When the user clicks on install, I got it to open up Software Center and go directly to the advertised application, but that still requires the user to click on Install. What I noticed is that sometimes the windows opens up behind all other windows, so the user is expecting the application to start installing, but that nothing happens. I want the application to start installing when the user clicks on Install when they get the notification.
My current setup in the XML is like so:
Hey, that should work if you follow the instructions as outlined in this post: https://www.imab.dk/windows-10-toast-notification-script-update-run-configmgr-applications-directly-from-the-action-button/
I would like to get mor euser information to display in the toast notification if possilbe. i.e
Display the users AD manager displayname and Email so user are able to check if this is correct or not.
I have had a quick look in the powershell and xml, but i cant see where i would put the Get-aduser etc info in.
Hello, Martin,
Great work with the script.
Several questions, if I may:
1. Can the PendingReboot notification enforce the reboot after some time? Or do we just annoy the users until they actually perform the reboot?
2. Can the Reboot button be switched from hard reboot to soft reboot, allowing users to save their work?
Thank you
Is there a way to change the color of the text in the body of the toast notification?
Hi, first of all thanks for the great script, does this script only works with windows 10? can it works with windows 11 too?
Yes, works fine with Windows 11 🙂
I’ve been using an old version of your app for a couple of years and it has been working well but now I downloaded the latest one and I’m not able to use the logo or heroimages. Not even yours from the package ( they are not blocked) but when i put a weblink ( the ones from your manual) as source for the images it works fine.
I suppose I shall put the images in the root of the folder with the ps-file as I did with the old one.
I’m pushing it to Windows 11 23H3.
Please help
Hm, that usually boils down to something you included: either you put too much text into the text options, or the images are unusually large/have weird dimensions? 🙂
Hello sir,
Thank you for for this amazing script. I have a simple question. I simply want to be able to set exit 0 or exit 1 when a user clicks a button. Is there any way to actually pass this on each button click?
Hi Martin,
I use your toast from time to time and I’ve found that. In one use case, I want the toast to appear all 5 days of the week until deadline is reached. What I do is setting up a Scheduled Task that runs the script every morning.
However, some users click on “Snooze” and do not reboor their device, which makes the Toast appear twice (one triggered by the snooze, another one by the scheduled task).
How can I detect if the Toast is waiting for the Snooze timeout?
Thanks for this great job!
Hey,
is it possible to set the command “srtg+alt+del” on a action button?
Best regards
Robert
I’ve been meaning to use this for so long, and finally carved some time out and it’s awesome. However, we don’t use ConfigMgr any more (using a third-party tool), so I’m trying to get the Action button to run a script which makes a web call to initiate software installation from the other tool.
I know I need to be setting up a Custom Protocol and Script, but I can’t seem to get it to call it. Couldn’t find any documentation going into it, anyone able to give me a steer?
Hi Martin
Is there any way around the hidden.vbs and scheduled tasks seeing as vbs is being wound down.
regards
Adrian
Hi, is there way to escape = sign in the more info link? For some reason using a ServiceNOW link the xml throws an error, although the full URL of the KB article I’d like to target is an XML property, and the = sign is not one of the required escape characters…
Oh actually found the trick.
The config xml is already requiring escaping &. But then it gets ‘translated’ to the original link, and then read by the main script and then it’s again complaining about not being escaped.
So in the main script I added this after the $Action2 line to ‘re-encode’ the link in my config file to have the escapement 🙂
$Action2 = $Xml.Configuration.Option | Where-Object {$_.Name -like ‘Action2’} | Select-Object -ExpandProperty ‘Value’
$Action2 = $Action2 -replace ‘&’, ‘&’
Now that Windows 11 won’t run VBS, what is everyone doing when they are trying to run the toast notification script with a scheduled task?
I believe there are some powershell equivalent somewhere out there, that does the same. if I find it, I will make sure to update the script. 🙂
Thanks so much for your efforts.
Have you found it yet?
Hi Martin,
great work! Thanks for this.
I have only a problem, that a powershell window is showing for few seconds and then the toast notification appears.
I had created a program (configmgr: packages) with the following command line
“Powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -NoLogo -Noninteractive -NoProfile -File New-ToastNotification.ps1 -Config config-toast-lowdiskspace.xml”
What is my mistake?
I had seen that a other dude realised it with psadt, but I think it’s a little bit to much for a small package.
thanks in advance.
Have you remembered to configure the program to run hidden as well? That’s an option within configmgr. 🙂
Love this script and have been using it a while, I have the need to to inform the logged in user of their Activre Directory “manager”
I added the following code to the powershell script:-
function Get-Manager {
$ADS_ESCAPEDMODE_ON = 2
$ADS_SETTYPE_DN = 4
$ADS_FORMAT_X500_DN = 7
$Pathname = New-Object -ComObject “Pathname”
[Void]$Pathname.GetType().InvokeMember(“EscapedMode”, “SetProperty”, $null, $Pathname, $ADS_ESCAPEDMODE_ON)
try {
$searcher = [ADSISearcher]”(sAMAccountname=$Env:USERNAME)”
$result = $searcher.FindOne()
if ($result -eq $null) {
Write-Output “User not found.”
return
}
$managerDN = $result.Properties[“manager”]
if ($managerDN -eq $null) {
Write-Output “Manager DN not found.”
return
}
[Void]$Pathname.GetType().InvokeMember(“Set”, “InvokeMethod”, $null, $Pathname, @($managerDN[0], $ADS_SETTYPE_DN))
$escapedDN = $Pathname.GetType().InvokeMember(“Retrieve”, “InvokeMethod”, $null, $Pathname, $ADS_FORMAT_X500_DN)
$manager = [ADSI]”LDAP://$escapedDN”
$managerInfo = @{
DisplayName = $manager.Properties[“displayName”][0]
Email = $manager.Properties[“mail”][0]
Phone = $manager.Properties[“telephoneNumber”][0]
}
return $managerInfo
} catch {
Write-Output “An error occurred: $_”
}
}
and then call it later on in the script:-
# Running Get Manager Check
if ($Managername -eq “True”) {
$Manager = Get-Manager
$Managerdisplay = “$manager.DisplayName”
$ManagerEMail = “$manager.Email”
$ManagerPhone = “$Manager.Phone”
Write-Log -Message “Given name retrieved from Active Directory: $Manager”
}
But for the life of me I am struggling to get the information to output. Can you please help.
If I wanted it to find the last timestamp for a specific event ID in the Windows Event log and present a notification if it’s been longer than X number of days, how easy would that be to make work?
Hello, first i would like to say this is awesome and great work into this. This has helped me significantly improve the way we deliver notification to end-users :).
Just a few questions i had that i may have missed potentially. I have take snippets of code from your program and made into our own. What i have noticed is that even though we are pushing the toast notification and custom app so that it cant be disabled by users. If a user goes and disables notification entirely from settings, script will re-enable settings after check. Once script has enabled notifications the toast will seemly run not popup even after re-enablement check.
another question, again i may had missed this in the article perhaps, is there a way to keep toast displaying after login? I’v noticed that toast will work on lock screen and give options. However, on login the toast will disappear even though no option was chosen.
Hello,
This is awesome work! Thank you for this and sorry for beating an old thread.
I had a couple of questions regarding the toast notifications. When testing them out iv noticed that the script will check if Notifications is enabled and if not turn it on. Iv noticed that if a user toggles and turns off all notifications, script will turn it back on however the toast will not be displayed regardless of if it’s on after that user interaction. It seems to be something with the user interaction that stops the custom app from display again. I just cant seem to find the setting or regkey for it or im doing something wrong. (Tested on win10/11).
Also, i may have missed it but is there a way to keep notification persistent on login screen. Noticed that toast notification will display on logon in screen but after entering credentials to desktop. It disappears. This might just be a windows thing than the script itself.
Hi Martin,
We are using version 2.20 of the app. We have successfully used it for an upgrade of Windows 10 to Windows 11 22H2, but now we are updating it to go from Windows 10 to Windows 11 23H2 and are getting an error. The error is happening when you click the notification to begin the install and it tries to launch software center. We get an error that software center can’t be launched. Looking at the logs, I don’t see any error mentioned so I’m not sure what to do to troubleshoot. We are deploying it as an SCCM package using this command line. powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File .\New-ToastNotification.ps1 -Config .\config-toast-waasfu.xml
The only thing that was changed when we moved to 23H2 was the KB number for the feature update so it seems very odd that we get the error on this new deployment and not on the old one. Any idea what would cause this issue?
Hi Martin,
Great script and really useful code, thanks very much!
I have been trying to find a way to add a maximum snooze count in here, using something like the MaximumSnoozeCount property, but i’m struggling to see where this could be inserted.
Is there a way we could enable a MaximumSnoozeCount, so that the user can snooze, for example, 3 times, before the snooze is disabled and a reboot is the only way out?
Many thanks indeed.
Luke
Helllo. This is a great solution and what we need to remind our users to reset password. Just want to be clear, we can do this process with just Intune? We do not use SCCM config manager.
What is causing it to create the log in ccm\logs? I see no option to do that. getting error code 1
Hi Martin,
We’d like to run this within a Citrix environment, however we’re getting push back from our Citrix admins stating that running a PowerShell script under a user context is a security risk. Do you know of any issues or concerns with the script running under the user context? Will the user have the ability (e.g.) to modify the script?
HI
I use intune
I created an application (simple powershell script) and I integrated the following command. It is installed in system
$Arg1 = “$($sourceFolder)Toast\New-ToastNotification.ps1”
Start-Process -filepath “powershell.exe” -ArgumentList “-WindowStyle Hidden -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -sta -file `”$Arg1`””
The application is installed but I do not have a notification.
The scripts and registry keys are not created.
on the other hand if I install with psexce in system, everything works correctly
This looks like a great script for our users who constantly ignore our password reset emails. Is it possible to configure this to warn users multiple times the closer the time comes to their password expiring?
yes, for on-premises identities, see this: https://www.imab.dk/windows-10-toast-notification-script-update-check-for-active-directory-password-expiration/
Hi Martin,
First of all, many thanks for this great work !
I also noticed that you are from Denmark, a country I really like and that I visited last Summer.
Regarding your script, I would have a little question as I am trying to achieve the following action : I would like that the “Install Now” button can enable me to launch a specific script or create a specific file in order to log the user’s action and confirm that he clicked that button.
Is that possible throughout a toast notification ?
Thanks in advance.
Fred
That would be possible, but you will have to script that yourself as a new custom protocol. The action button can almost launch anything, if you enable it to do it. You will have to look at the other custom protocols I have created. The ones that exists today are targeted towards actions with ConfigMgr. You can put a powershell script in a configmgr package and deploy that to your devices and have the toast notification script to launch that via the action button.
Hi Martin,
Excellent script/tool! Really helpful. Quick question: No matter what I set the ‘Scenario’ (short or long) to the toast disappears after 5 seconds (and I need it for the 25 seconds or so). I tried using the default ‘config-toast.xml’ and just change that value and toast hides after 5 seconds. Am I doing something wrong or should I change some other value?
Thanks!
Hi, can I get you to set the scenario to “alarm” or “reminder”? https://learn.microsoft.com/en-us/windows/apps/design/shell/tiles-and-notifications/toast-schema#toastscenario
This should keep the notification on the screen until dismissed.
Thanks for the reply, I tried any combination but they didn’t seem to work. I ended up making a minor modification to the code to check if there’s already a Toast open and if there is, it closes it and a new one is opened.
Hello
Can someone post guidance on how to make a custom protocol to make the action button open software center? I get it to fire but I get an error saying your device needs a new app to open this link. But if I run just the one liner outside the script software center opens just fine. Thanks!
All of those details are actually inside the new-toastnotification.ps1 file. Look for the Write-CustomActionRegistry() function, where the custom protocols are created within HKCU in registry. 🙂