Get-WMIObject hat keine Rückgabe als geplanter Task
Hallo zusammen,
ich habe vor ein Skript zu schreiben, dass die Fehlerhafte Mailfunktion eines Backupprogramms ersetzt und zusätzlich das Angeschlossene USB-Laufwerk ausliest auf dem das Backup gespeichert wurde.
Das Mailproblem habe ich bereits hier gelöst:
Send-Mailmessage schickt nicht aus geplantem Task
Das Skript funktioniert, wenn ich es direkt ausführe oder als geplanter Task mit der Option "Nur ausführen, wenn der Benutzer angemeldet ist". Nutze ich die Funktion "Unabhängig von Benutzeranmeldung", egal ob mit oder ohne gespeichertem Kennwort ist die Rückgabe von Get-WMIObject leer. Hat jemand eine Idee woran das liegt oder besser noch, wie ich die Laufwerke identifizieren kann?
Hier noch mal der aktuelle Code
Mit freundlichen Grüßen
SirMank
ich habe vor ein Skript zu schreiben, dass die Fehlerhafte Mailfunktion eines Backupprogramms ersetzt und zusätzlich das Angeschlossene USB-Laufwerk ausliest auf dem das Backup gespeichert wurde.
Das Mailproblem habe ich bereits hier gelöst:
Send-Mailmessage schickt nicht aus geplantem Task
Das Skript funktioniert, wenn ich es direkt ausführe oder als geplanter Task mit der Option "Nur ausführen, wenn der Benutzer angemeldet ist". Nutze ich die Funktion "Unabhängig von Benutzeranmeldung", egal ob mit oder ohne gespeichertem Kennwort ist die Rückgabe von Get-WMIObject leer. Hat jemand eine Idee woran das liegt oder besser noch, wie ich die Laufwerke identifizieren kann?
Hier noch mal der aktuelle Code
$drives = (gwmi Win32_USBControllerDevice | % {[wmi]($_.Dependent)} | Where-Object {($_.Description -like '*massen*')}).deviceid # Alle USB Massenspeicher IDs auslesen
[array]$drives=$drives|%{ # Bekannte IDs in sprechende Namen ändern [array] sorgt dafür, dass auch ein einzelnes Laufwerk in einem Array landet
switch($_){
"USB\VID_1A5A&PID_0006\007820719538" {"RDX Laufwerk"}
"USB\VID_1058&PID_260D\575837324442314C37505343" {"WD My Passport"}
"USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200386Z" {"Montag"}
"USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200382V" {"Dienstag"}
"USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W201056V" {"Mittwoch"}
"USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200367D" {"Donnerstag"}
"USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200414Y" {"Freitag1"}
"USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200439V" {"Freitag2"}
"USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200393A" {"Freitag3"}
"USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200438F" {"Freitag4"}
Default {"Unbekanter Datenträger: "+$_}
}
}
if ((Get-Content C:\backup\auswertung-Sicherung.txt |Select-String -Pattern "Gesamt") -like "*Gesamtergebnis: OK*") {$status="OK"} else {$status="Fehler"} # Status aus Textdatei auslesen
$body="Sicherung`n`nFolgende USB Laufwerke sind angeschlossen`n`n"+ $drives[0] +"`n"+ $drives[1]+ "`n"+ $drives[2]+"`nStatus Datensicherung: $status" # Body für die Mail erzeugen
# Mail mit Mailkit erzeugen
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\send-mailkitmessage\MailKit.dll"
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\send-mailkitmessage\MimeKit.dll"
$SMTP = New-Object MailKit.Net.Smtp.SmtpClient
$Builder = New-Object MimeKit.BodyBuilder
$Message = New-Object MimeKit.MimeMessage
$TextPart = New-Object MimeKit.TextPart("PLAIN")
$SMTP.CheckCertificateRevocation=$false
$Message.From.Add("hyperv@ho.local")
$Message.To.Add("servermeldungen@local.de")
$Message.Subject = 'Backup MVZ HO'
$Message.Body = $TextPart
$Builder.TextBody=$body
$Builder.Attachments.Add("C:\backup\auswertung-Sicherung.txt")
$Message.Body = $Builder.ToMessageBody()
$SMTP.Connect('exchange.ctc.local', 25, $False)
$SMTP.Send($Message)
$SMTP.Disconnect($true)
$SMTP.Dispose()
# Mailkit Ende
Mit freundlichen Grüßen
SirMank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 43884705497
Url: https://administrator.de/contentid/43884705497
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
3 Kommentare
Neuester Kommentar
Wie immer bei sowas, Logging ins Skript einbauen mittels Start-Transcript.
Des weiteren solltest du Get-WMIObject besser ersetzen durch Get-CimInstance
Get-WMIObject ist veraltet und ist auch erheblich langsamer beim Zugriff. Des weiteren ist für bestimmte Zugriffe teilweise der Parameter -EnableAllPrivileges nötig.
Du prüfst auch gar nicht ob $drives überhaupt Einträge hat usw. da fehlt sämtliches Error-Handling im Skript!
Im Task bitte auch als ausführendes Principal SYSTEM hinterlegen.
Uns fehlen hier btw. sämtliche Task-Einstellungen ...
Gruß Sid.
Des weiteren solltest du Get-WMIObject besser ersetzen durch Get-CimInstance
Get-WMIObject ist veraltet und ist auch erheblich langsamer beim Zugriff. Des weiteren ist für bestimmte Zugriffe teilweise der Parameter -EnableAllPrivileges nötig.
Du prüfst auch gar nicht ob $drives überhaupt Einträge hat usw. da fehlt sämtliches Error-Handling im Skript!
Im Task bitte auch als ausführendes Principal SYSTEM hinterlegen.
Uns fehlen hier btw. sämtliche Task-Einstellungen ...
Gruß Sid.
Moin,
ich vermute mal ein Sprachproblem. Du suchst in Deinem WHERE-Statement nach der Beschreibung "Massen". Das funktioniert so lange, solange die culture de-de ist. Ist es eine andere, dann funktioniert das nicht. Du solltest nach was anderem suchen z. B.
Ich bin mir nicht sicher, ob das für Deinen Fall ok ist. Das Nachschlagen den geeigneten Attributs überlasse ich Dir.
hth
Erik
ich vermute mal ein Sprachproblem. Du suchst in Deinem WHERE-Statement nach der Beschreibung "Massen". Das funktioniert so lange, solange die culture de-de ist. Ist es eine andere, dann funktioniert das nicht. Du solltest nach was anderem suchen z. B.
$_.Service -eq USBSTOR
Ich bin mir nicht sicher, ob das für Deinen Fall ok ist. Das Nachschlagen den geeigneten Attributs überlasse ich Dir.
hth
Erik