PowerShell-Skript für geplante Aufgaben sendet E-Mails an einige Server, an andere jedoch nicht

PowerShell-Skript für geplante Aufgaben sendet E-Mails an einige Server, an andere jedoch nicht

hoffentlich kann mir jemand helfen, das zu verstehen, denn es macht mich ein bisschen verrückt! [Ich bin neu, also seid bitte nachsichtig :)]

Ich habe vor Kurzem ein PS-Skript eingerichtet, das beim Start von der geplanten Windows-Aufgabe ausgeführt wird, und zwar über eine Batchdatei mit dem Schalter -ExecutionPolicy Bypass. Ziel ist es, eine Liste nicht laufender automatischer Dienste an unsere Sysadmin-Verteilerliste zu senden, damit wir bei Bedarf eingreifen können.

Die Aufgabe wurde per Gruppenrichtlinienobjekt auf einer Reihe von Windows 2008-, 2008 R2- und Windows 2012 R2-Servern bereitgestellt. Die Aufgabe wird als SYSTEM mit höchsten Berechtigungen ausgeführt, und unsere Gesamtstruktur/Domäne funktioniert auf Server 2012 R2-Ebene. Das Skript wird von einem UNC auf unserem SAN ausgeführt und umfasst eine Localhost-Ausgabe nach C:\temp (eine einfache Notepad.txt-Datei).

Hier ist das Skript: [Zugegebenermaßen bin ich ein ziemlicher Neuling in Sachen PowerShell, also habe ich es aus verschiedenen Artikeln von hier und da zusammengeschustert und so lange daran herumgebastelt, bis es auf einem akzeptablen Niveau funktionierte!]

#PowerScript task for reporting the name of any service with automatic startup mode that are not are running. 
$Results = @()
$hst = hostname
$msgbdy = "This machine has restarted.
Check the attached file for any services with Automatic startup configuration that are not running. 
[NB: Services configured to startup in Automatic (Delayed Start) are ignored]"
#GET AUTOMATIC (NOT DELAYED-START) SERVICES
$Results += Get-WmiObject -Class Win32_Service -Filter {State != 'Running' and StartMode = 'Auto'} |
ForEach-Object {Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$($_.Name)" |
Where-Object {$_.Start -eq 2 -and $_.DelayedAutoStart -ne 1}} |
Select-Object -Property @{label='ServiceName';expression={$_.PSChildName}}
#OUTPUT TO TXT
$Results | Out-File "c:\temp\$hst.txt"
#PAUSE FOR 2 SECONDS
Start-Sleep -s 2
#SEND OUTPUT FILE BY EMAIL
send-mailmessage -from "[email protected]" -to "[email protected]" -subject "$hst Automatic Services Check" -Attachments "c:\temp\$hst.txt" -body $msgbdy -priority High -smtpServer server.ourdomain.co.uk

Nun funktioniert das Skript, wenn es direkt in der PowerShell-Eingabeaufforderung ausgeführt wird. Es funktioniert, wenn Sie die Batchdatei ausführen, um es auszulösen, wie Sie es bei einer geplanten Aufgabe tun würden. Und es funktioniert, wenn es als geplante Aufgabe ausgelöst wird. Allerdings ist dies, wie sich herausgestellt hat, nur bei etwa 75 % unserer Maschinen der Fall.

Bei den anderen 25 % ist der einzige Teil des Skripts, der nicht funktioniert, der Teil mit der E-Mail-Nachricht. Die Textdatei wird in C:\temp mit dem „Hostnamen“ usw. erstellt, um zu identifizieren, von welcher Maschine sie stammt, und der Inhalt ist korrekt. Sie beenden die Arbeit einfach nicht und senden den E-Mail-Bericht nicht (was ja eigentlich der Sinn der ganzen Übung ist :)

Noch frustrierender ist, dass diese „Problemmaschinen“ die E-Mail senden, wenn ich den Vorgang durch Ausführen der Batchdatei oder des PowerShell-Skripts direkt auslöse, wenn ich mit meinem Benutzerkonto am Server-Desktop angemeldet bin. Ich weiß also, dass sie dazu in der Lage sind!

Ich bin für jede Hilfe und für jede Zeit dankbar, die Sie zum Nachdenken aufwenden!

Danke, James

Antwort1

Ich scheine es behoben zu haben. Es war weder eine Authentifizierung erforderlich noch eine sichere Verbindung. Ich habe das Problem auf den Fehler „Das Konto ‚DOMAIN\COMPUTER$‘ hat gültige Anmeldeinformationen bereitgestellt, verfügt jedoch nicht über die Berechtigung zum Senden an den SMTP-Empfangsconnector ‚Standard-Frontend-MAILSERVER; Authentifizierung fehlgeschlagen.‘“ in den Exchange 2013-Serverprotokollen eingegrenzt. Obwohl sich der Server im IP-Bereich befand, wurde dies aus irgendeinem Grund durch einfaches Aktivieren des Kontrollkästchens Berechtigungsgruppen/Exchange-Benutzer zugelassen. Ich bin mir nicht sicher, warum dies nur für einige der Server erforderlich war und inwiefern es relevant ist, aber es funktioniert und das reicht! Unsere Exchange-Umgebung befindet sich mitten in der Migration und ist im Moment ziemlich chaotisch, daher ist es naheliegend, dass die Antwort dort liegt.

Danke @Todd Wilcox für die Hinweise. Prost

verwandte Informationen