stefan007
Goto Top

PC soll E-Mail senden nach erfolgtem Neustart

Hi,

ich habe 4 VMs, die einen daily-reboot per Aufgabenplanung durchführen. Um kontrollieren zu können, ob die auch tatsächlich neu gestartet werden, möchte ich pro VM eine Mail nach erfolgtem Neustart versenden lassen.


Wie stelle ich es am "einfachsten" an? Ich finde per Google überwiegend Extratools (z.B. Sendmail). Lässt sich das auch mit komplett board eigenen Mitteln bewerkstelligen?

Alle VMs laufen auf Windows 10 Pro.


Gruß,
Stefan

Content-ID: 1989211847

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

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

colinardo
Lösung colinardo 23.02.2022 aktualisiert um 18:50:42 Uhr
Goto Top
Powershell Einzeiler, lässt sich auch komplett in die Argumente des Taskplaners pressen wenn man will.
Send-MailMessage -From "user@domain.de" -to "empfaenger@domain.de" -Subject "Reboot von $env:Computername erfolgt." -SmtpServer smtp.domain.de -Credential (New-Object PSCredential("USERNAME",(ConvertTo-SecureString 'PASSWORD' -AsPlainText -Force))) -UseSSL  
Achtung: Send-MailMessage, supportet bei TLS nur STARTTLS Ports, kein SSL mit initialer Transportverschlüsselung!

Alternative dazu Mailkit nutzen das supportet auch moderne Authentifizierungsverfahren
Powershell: S-MIME verschlüsselte und signierte E-Mail inkl. sicherem Anhang verschicken (Mailkit-Bibliothek)

Grüße Uwe
Stefan007
Stefan007 23.02.2022 um 18:50:10 Uhr
Goto Top
Danke Uwe face-smile
colinardo
colinardo 23.02.2022 aktualisiert um 18:51:35 Uhr
Goto Top
Immer gerne face-smile
Stefan007
Stefan007 23.02.2022 um 20:47:31 Uhr
Goto Top
Hi Uwe,

ich habe ein Problem.... (wer hätte das gedacht?). Wenn ich das Script manuell als Admin starte geht es. Über die Aufgabenplanung leider nicht.

Gibt es in Powershell einen Command, den ich "innerhalb" des Scripts nutzen kann, um volle Adminrechte zu bekommen?

Ich habe es auch mit einer Verknüpfung und C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -NoExit "[Pfad]" probiert, leider ohne Erfolg.


Ich hasse die Aufgabenverwaltung....
colinardo
Lösung colinardo 23.02.2022, aktualisiert am 24.02.2022 um 11:07:37 Uhr
Goto Top
Zitat von @Stefan007:
ich habe ein Problem.... (wer hätte das gedacht?). Wenn ich das Script manuell als Admin starte geht es. Über die Aufgabenplanung leider nicht.
Nutzt du wie im Skript die manuell angegebenen Credentials oder implizit über den Account der den Task ausführt?
Welche Rechte nutzt der Task und wie sind seine exakten Einstellungen? Welche Trigger & Co.? Wir können noch nicht hellsehen, sorry.
Gibt es in Powershell einen Command, den ich "innerhalb" des Scripts nutzen kann, um volle Adminrechte zu bekommen?
Ja, bringt dir hier aber nichts, da du Tasks schon direkt elevated ausführen kannst, entweder über das Setzen des Häkchens bei "Mit höchsten Rechten ausführen" oder durch Auswahl des SYSTEM Accounts, aber zum Mails schicken wäre das eigentlich Overkill und nicht nötig!
Ich hasse die Aufgabenverwaltung....
Nee, man muss nur die Rechte genau kennen und wie diese dort genutzt werden 😉, es gibt nämlich auch Credentials wenn man die in Taskplaner nutzt gar keinen Netzzugriff haben.

Debugging im Taskplaner ist auch ganz einfach indem du im Skript-Kopf ein
Start-Transcript c:\temp\log.txt
setzt und am Ende dann ein
Stop-Transcript
Dann bekommst du Fehlermeldungen bei der Taskausführung im Log als Klartext. Beachte das der Account den du im Taskplaner setzt im Log Verzeichnis dann auch Schreibrechte haben muss.

Sollten bei dir dennoch alle Stricke reißen und du immer noch nicht zurecht kommen, mach ich dir morgen mal eine XML zum Import in den Taskplaner fertig.

Man muss den Taskplaner nur einmal kapiert haben und die Hintergründe kennen was bei welchen Credentials möglich ist und auch zu welchem Zeitpunkt dann ist das eine Spielerei, nur leider verstehen viele die Zusammenhänge dabei nicht und sind dann enttäuscht, zu unrecht.

#edit# hier die Task-XML die hier einwandfrei funktioniert (natürlich nach Anpassen der eigenen Daten in den Argumenten).
Ansonsten könnte es sein das das Netzwerk zum Rechnerstart noch nicht steht, dann musst du entweder einen Loop in das Skript einbauen das wartet bis eine erfolgreiche Verbindung zu stande gekommen ist (while Schleife mit Test-Connection), oder die bekannte GPO setzen das der Rechner auf das Netzwerk beim Start wartet.

Bitte zwingend als XML im Unicode-Encoding speichern und dann im Taskplaner importieren!)
<?xml version="1.0" encoding="UTF-16"?>  
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  
  <RegistrationInfo>
    <Date>2022-02-24T10:56:36.0755354</Date>
    <Author>@colinardo</Author>
    <URI>\Send_Mail_On_Boot</URI>
  </RegistrationInfo>
  <Triggers>
    <BootTrigger>
      <Enabled>true</Enabled>
    </BootTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">  
      <UserId>S-1-5-18</UserId>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">  
    <Exec>
      <Command>powershell</Command>
      <Arguments>-EP Bypass -C "Send-MailMessage -From 'user@domain.de' -to 'user2@domain.de' -Subject ('Computer' + $env:Computername + ' wurde gestartet.') -SmtpServer 'smtp.domain.tld' -Credential (New-Object PSCredential('USERNAME',(ConvertTo-SecureString 'PASSWORD' -AsPlainText -Force))) -UseSSL -Port 587"</Arguments>  
    </Exec>
  </Actions>
</Task>
Stefan007
Stefan007 23.02.2022 um 22:22:43 Uhr
Goto Top
Ich melde mich morgen, mir reichts für heut face-smile
Stefan007
Stefan007 26.02.2022 um 09:09:53 Uhr
Goto Top
Hi Uwe,

sorry, jetzt habe ich etwas Ruhe für das Thema. Wenn ich deine XML importiere, dann sagt mir die Aufgabenplanung, dass "mit höchsten Privilegien ausführen" nicht aktiviert ist. Ist das so gewollt? Entspricht das dem "Priority 7" ?

Gruß,
Stefan
Stefan007
Stefan007 26.02.2022 um 09:16:50 Uhr
Goto Top
Sooo geht!!!

Bei mir war das Problem mit dem "SYSTEM" User. Ich hatte natürlich den genutzt, der sich auch anmeldet (ist lokaler Admin).

Hostnamen werden jedoch nicht aufgelöst aber das passe ich bei der kleinen Anzahl an VMs eben manuell an.

Uwe, wie immer gilt dir mein Dank für deine Arbeit.
colinardo
colinardo 26.02.2022 aktualisiert um 10:16:07 Uhr
Goto Top
Zitat von @Stefan007:

Hi Uwe,
Wenn ich deine XML importiere, dann sagt mir die Aufgabenplanung, dass "mit höchsten Privilegien ausführen" nicht aktiviert ist. Ist das so gewollt?
Bei der Verwendung des SYSTEM-Accounts läuft sowieso alles per Default eleviert mit höchsten Rechten, ob das Häkchen aktiviert ist oder nicht spielt dann keine Rolle mehr.
Hostnamen werden jedoch nicht aufgelöst
Kann ich hier nicht bestätigen.
Uwe, wie immer gilt dir mein Dank für deine Arbeit.
Immer gerne 👍