truustyy
Goto Top

Nachricht über Powershell schicken

Hallo zusammen,

und zwar benötige Ich mal eure Hilfe.

Folgende Situation:

Wir haben ein Monitoring Programm worüber wir Powershell-Befehle/Skripte absetzen können an jeden Rechner, soweit so gut. Nun suche Ich nach einer Möglichkeit, den User über ein kommendes Update zu informieren per Popup/Nachricht/whatever. Mir wäre wichtig dass die Nachricht gestaltbar wäre (mehrere Zeilen, mit Logo) und dass diese nicht verschwendet, bis der User sie bestätigt hat.

Probiert habe Ich:

1.
Msg * Sehr geehrte Damen und Herren, ein Update steht an. Bitte......... - Firma XYZ
=> Erfüllt den Zweck, optisch aber echt grauenhaft. Jedoch kann man kein Logo einfügen und keine Zeilenumbrüche wie es aussieht.

2. (Vom Internet rauskopiert, das war soziemlich das beste was Ich gefunden hab)
#Specify Launcher App ID
$LauncherID = "{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe"  

#Load Assemblies
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null

#Build XML Template
[xml]$ToastTemplate = @"  
<toast>
    <visual>
        <binding template="ToastImageAndText03">  
            <text id="1">Nachricht von Firma XYZ</text>  
            <text id="2">Wir werden den Server updaten. Bitte Programm XYZ neustarten!  
            
            MfG Firma XYZ</text>
         


            #<image id="1" src="Q:\Skript\Firmenlogojpg" /> 
        </binding>
    </visual>
</toast>
"@  


#Prepare XML
$ToastXml = [Windows.Data.Xml.Dom.XmlDocument]::New()
$ToastXml.LoadXml($ToastTemplate.OuterXml)

#Prepare and Create Toast
$ToastMessage = [Windows.UI.Notifications.ToastNotification]::New($ToastXML)
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($LauncherID).Show($ToastMessage)

=> Erfüllt den Zweck, Logo kann man einbinden ( Funktioniert aber irg. wie nur über den Buchstaben und nicht über die IP wenns im NLW liegt).
Jedoch ist die Nachricht viel zu kurz da, vielleicht mal 5 Sekunden und alles was über die 2 Zeilen hinausgeht verschwindet und ist nicht lesbar.


Hat da jemand eine Idee wie man das umsetzen kann?

Ziel: Eine sehr gute, lesbare Nachricht mit unserem Firmenlogo drauf die den User vorwarnt dass ein Update zu Zeit XYZ ansteht und wenn das Update durch ist, dass die dann Programm XYZ neustarten sollen.

Danke schonmal!

(Bin kein Programmierer und das eig. mein erster tiefergehender Kontakt mit Powershell. Desto weniger Ich am Skript machen muss desto besser wäre es :D )

Content-ID: 3257672770

Url: https://administrator.de/contentid/3257672770

Ausgedruckt am: 19.11.2024 um 05:11 Uhr

141986
Lösung 141986 05.07.2022 aktualisiert um 14:46:29 Uhr
Goto Top
Tach!

Soweit ich das gelesen habe, muss man via GPPs dann die Registry umbauen damit das Toast > 5 Sekunden angezeigt wird.

Ich persönlich würde ich mich für einen Alarm entscheiden mit BurntToast.

### CONFIG ###
$logo = "P:\logo.png"  
$ersteUeberschrift = "Eine Nachricht vom IT-Administrator"  
$ueberschriftNebenLogo = "Geöffnete Dateien bitte abspeichern!"  
$infoText = "Der Server XYZ wird demnächst neugestartet."  
### ENDE ###
### AB HIER NICHTS MEHR ÄNDERN ###

$konfig = New-BTHeader -Id 1 -Title $ersteUeberschrift
$psmodule = "BurntToast"  
$ProgressPreference = "SilentlyContinue"  

Write-Warning "Pruefe notwendige Module .. (BurntToast)"  
Write-Host ""  
if (Get-Module -ListAvailable -Name $psmodule) {
	New-BurntToastNotification -AppLogo $logo -Text $ueberschriftNebenLogo,
                                                       $infoText -SnoozeAndDismiss -Sound 'Alarm2' -Header $konfig  
} 
else {
	Write-Host "BurntToast nicht gefunden! Installiere Modul fuer den aktuellen Benutzer..." -F Red  
        Install-Module -Name BurntToast -Scope CurrentUser -Force
	Write-Host ""  
	cls
	Write-Host "erfolgreich installiert!" -F Green  
	New-BurntToastNotification -AppLogo $logo -Text $ueberschriftNebenLogo,
                                                       $infoText -SnoozeAndDismiss -Sound 'Alarm2' -Header $konfig  
}

Weitere Befehle findest Du hier:
Github BurntToast

Vielleicht hilft es Dir.

VG


Bin kein Programmierer
This.

Edita hat etwas den Code aufgeräumt und paar Infos ergänzt. Wenn ich Sie nicht hätte ...
truustyy
truustyy 05.07.2022 um 13:21:17 Uhr
Goto Top
Hey,

das gefällt mir sehr!
Danke dir!
Ich hätte da bloß noch eine Frage und zwar ist es möglich BurnToast im Hintergrund zu installieren, damit die User nix bestätigen müssen?


Gruß
141986
141986 05.07.2022 um 13:52:48 Uhr
Goto Top
Heyhu,

habe den Code nochmals etwas vereinfacht face-smile

ist es möglich BurnToast im Hintergrund zu installieren
powershell.exe -ExecutionPolicy Bypass
könnte klappen. Habs allerdings noch nicht getestet.

VG
TK1987
TK1987 05.07.2022 um 14:17:23 Uhr
Goto Top
Moin,

Zitat von @truustyy:
Ich hätte da bloß noch eine Frage und zwar ist es möglich BurnToast im Hintergrund zu installieren, damit die User nix bestätigen müssen?
einfach mit Parameter -Force installieren, so wird die Bestätigungsmeldung unterdrückt. Sofern auch der Installationsprozess unsichtbar stattfinden soll, muss zudem $ProgressPreference auf "SilentlyContinue" gesetzt werden.
$ProgressPreference = "SilentlyContinue"  
Install-Module -Scope CurrentUser BurntToast -Force

Gruß Thomas
141986
141986 05.07.2022 um 14:24:12 Uhr
Goto Top
Zitat von @TK1987:

Moin,

Zitat von @truustyy:
Ich hätte da bloß noch eine Frage und zwar ist es möglich BurnToast im Hintergrund zu installieren, damit die User nix bestätigen müssen?
einfach mit Parameter -Force installieren, so wird die Bestätigungsmeldung unterdrückt. Sofern auch der Installationsprozess unsichtbar stattfinden soll, muss zudem $ProgressPreference auf "SilentlyContinue" gesetzt werden.
$ProgressPreference = "SilentlyContinue"  
Install-Module -Scope CurrentUser BurntToast -Force

Gruß Thomas

Danke Dir - habe ich im Code oben ergänzt.

VG
TK1987
TK1987 05.07.2022 um 14:41:50 Uhr
Goto Top
Moin,

Zitat von @141986:
Danke Dir - habe ich im Code oben ergänzt.
Gerne, aber die Write-Host-Befehle zum Bestätigen solltest du dann auch noch entfernen face-wink

Gruß Thomas
truustyy
truustyy 05.07.2022 aktualisiert um 15:34:35 Uhr
Goto Top
Hey,

du hast den Code echt massiv vereinfacht, wow!

Leider habe Ich ein Problem. Lokal funktioniert das alles.

Jedoch wenn Ich es losschicke über die Aufgabenplanung über unser Monitoringprogramm krieg Ich diese Ausgabe:

Set-ExecutionPolicy : Die Ausführungsrichtlinien wurden von Windows PowerShell erfolgreich aktualisiert, die 
Einstellung wird jedoch von einer in einem spezielleren Bereich definierten Richtlinie überschrieben. Aufgrund der 
Überschreibung wird die aktuelle geltende Ausführungsrichtlinie "Bypass" für die Shell beibehalten. Geben Sie   
"Get-ExecutionPolicy -List" ein, um die Ausführungsrichtlinieneinstellungen anzuzeigen. Weitere Informationen erhalten   
Sie mit "Get-Help Set-ExecutionPolicy".  
In C:\Windows\TEMP\tmp391C.tmp.ps1:1 Zeichen:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
WARNUNG: Pruefe notwendige Module .. (BurntToast)

Copy-Item : Zugriff verweigert
In C:\Windows\system32\config\systemprofile\Documents\WindowsPowerShell\Modules\BurntToast\0.8.5\BurntToast.psm1:16 
Zeichen:17
+ ...              Copy-Item -Path $Source -Destination $NewFilePath -Force
+                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\123.456.789.0...pt\XYZ.jpg:String) [Copy-Item], UnauthorizedAc 
   cessException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand
 
Copy-Item : Der Pfad "\\123.456.789.0\Doku\Skript\XYZ.jpg" kann nicht gefunden werden, da er nicht vorhanden   
ist.
In C:\Windows\system32\config\systemprofile\Documents\WindowsPowerShell\Modules\BurntToast\0.8.5\BurntToast.psm1:16 
Zeichen:17
+ ...              Copy-Item -Path $Source -Destination $NewFilePath -Force
+                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (\\123.456.789.0...pt\XYZ.jpg:String) [Copy-Item], ItemNotFoundExce 
   ption
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
 
Ausnahme beim Aufrufen von "Show" mit 1 Argument(en):  "Zugriff verweigert (Ausnahme von HRESULT: 0x80070005   
(E_ACCESSDENIED))"  
In C:\Windows\system32\config\systemprofile\Documents\WindowsPowerShell\Modules\BurntToast\0.8.5\BurntToast.psm1:2478 
Zeichen:9
+         [Windows.UI.Notifications.ToastNotificationManager]::CreateTo ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : UnauthorizedAccessException


Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Hab damit es mal ausprobiert ob Ich dann berechtigt bin, ist leider nicht der Fall.

Wisst ihr wie Ich das lösen kann? Bin mir nämlich nicht sicher ob Ich die Powershell bzw. in der Aufgabenplanung angeben kann, dass diese als Admin gestartet werden soll. Da ist noch eine extra Zeile namens "Parameter", vielleicht muss Ich da was einfügen?

Danke schonmal!


Gruß


EDIT: Zeile 22 wo er sagt der Pfad kann nicht gefunden verstehe Ich leider auch nicht, lokal funktionierts?