Jump to content

Powershell-Ausgabe via Email verschicken


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen

 

ich versuche folgende Powershell-Ausgabe via Email zu verschicken:

 

Get-MailboxDatabase | Sort Name | ForEach{
    $db = $_.Name
    $curServer = $_.Server.Name
    $ownServer = $_.ActivationPreference | ? {$_.Value -eq 1}

    Write-Host “$db on $curServer should be on $($ownServer.Key) – ” -NoNewLine

    If ($curServer -ne $ownServer.Key)
    {

       Write-Host “WRONG” -ForegroundColor Red
    }
    Else
    {
        Write-Host “OK” -ForegroundColor Green
    }
}

 

Quelle: http://msexchangeguru.com/2011/08/16/monitor-dags/

 

 

Vorweg, ich bin kein großer Powershell-Spezi. Leider bekomme ich es auch nicht hin, es als simple Textausgabe, sprich ">Ausgabe.txt" auszugeben.

Ich hatte versucht, dieses als Variable abzuspeichern, jedoch ohne Erfolg :-(

 

Ich möchte damit, mehr unsere DAG im Auge behalten. Hin und wieder werden nämlich die passiven Datenbanken zu aktiven.

Diese Powershell-Ausgabe liefert genau das, was ich brauche.

 

Gruß

Iso

 

 

Link zu diesem Kommentar

Moin,

 

kurz gesagt; Wenn Dir die Erfahrung in der PowerShell fehlt, wirst Du am Anfang sehr große Probleme haben, die man nicht in einem Forum lösen kann.

 

In der PowerShell ist alles ein Objekt und muss auch so behandelt werden. Eine einfach Umlenkung in eine Datei geht zwar, aber bringt eventuell nicht das gewünschte Ergebnis.

 

Dein Script ist ja eigentlich ganz simpel. Ich würde den Text, den Du da mit Write-Host ausgibst, in eine Variable speichern.

 

Und dann den Inhalt als "Body" mit "Send-Mailmessage" verschicken. Schau Dir die Beispiele an, da ist schon einiges erklärt.



Nachtrag: In Deinem Link ist doch sogar eine Komplett-Lösung mit Mailversand beschrieben. Was ist den jetzt noch das Problem?

Link zu diesem Kommentar

Hi

 

Danke für die Rückmeldung.

 

0815-Powershell-Befehle kann ich schon lesen bzw. erstellen. Bin halt auf dem Gebiet aber noch Anfänger.

Möchte mich in Zukunft da schon intensiver einarbeiten, weil die Shell immer wichtiger für die Administration wird.

 

Zum Problem:

Eine Einfache Umlenkung in eine Text-Datei könnte auch schon reichen.

Dann könnte man es sich als Anlage zuschicken oder man lädt sich den Inhalt der Textdatei in den Body der Email hinein.

Ein einfaches SendMailmessage samt Anlage bzw. mit Body via Shell würde ich hinbekommen.

 

Schöner wäre es natürlich, die komplette obige Befehlsausgabe als eine Variable zu haben...und das check ich irgendwie nicht bzw. bekomme es nicht hin :(

 

Wie gesagt, brauche ich nur die obige Befehlsausgabe via Email. Die anderen Checks in dem Artikel brauche ich nicht.

Aus dem Teil mit der Email Funktion werde ich nicht schlau

bearbeitet von Isostar
Link zu diesem Kommentar

Nimm anstelle von Write-Host ein Write-Output

Das -Foregroundcolor kannst du da weglassen, spielt in einer Textdatei sowieso keine Rolle.

Aussehen könnte dein Script z.B. so:

 

 

$Log = c:\temp\Logfile.txt

# Mailfunktion
function sendmail($body)
{
    $SmtpClient = new-object system.net.mail.smtpClient
    $MailMessage = New-Object system.net.mail.mailmessage
    $att = new-object Net.Mail.Attachment($Log)
    $SmtpClient.Host = "<deinMailserver>"
    $mailmessage.from = "<deineAbsenderadresse>"
    $mailmessage.To.add("<Zielpostfach>")
    $mailmessage.Subject = "<Betreff>"
    $MailMessage.IsBodyHtml = $true
    $mailmessage.Body = $body
    $mailmessage.Attachments.Add($att)
    $smtpclient.Send($mailmessage)
}
 
Get-MailboxDatabase | Sort Name | ForEach{
    $db = $_.Name
    $curServer = $_.Server.Name
    $ownServer = $_.ActivationPreference | ? {$_.Value -eq 1}
    Write-Output“$db on $curServer should be on $($ownServer.Key) – ” -NoNewLine
    If ($curServer -ne $ownServer.Key)
    {
       Write-Output “$curServer” >> $Log
       Write-Output “WRONG” >> $Log
    }
    Else
    {
       Write-Output “$curServer” >> $Log
       Write-Output “OK” >> $Log
    }
}

    $body = "<Mailtext einfügen>"
    sendmail $body
bearbeitet von Alith Anar
Link zu diesem Kommentar

Moin,

 

@Alith Anar: Zwei kleiner "Fehler" in Deinem Bespiel: Eine Zeile mit "Write-Host" gibt es noch. Und Dein Output wird immer angehängt, d.h. die Datei wird immer länger und länger (im ersten Entwurf wurde sie dagegen immer überschrieben). Ok, das ist für eine Log-Datei eventuell sinnvoll, aber nicht für die Mail zur Benachrichtigung. In einer Log-Datei müsste man dann aber auch Datum/Zeit schreiben, sonst bringt einen die reine Auflistung gar nichts.

 

@Isostar: Wenn Dein Wissen nicht mal ausreicht, aus einem Write-Host “WRONG” ein $a = “WRONG” zu machen, fehlen Dir vermutlich wirklich sehr viele Grundlagen des allgemeinen Scriptings. Dann wirst Du es mit der PS sehr schwer haben,

 

 

Get-MailboxDatabase | Sort Name | ForEach{
    $db = $_.Name
    $curServer = $_.Server.Name
    $ownServer = $_.ActivationPreference | ? {$_.Value -eq 1}
   $body += “$db on $curServer should be on $($ownServer.Key) – ”
    If ($curServer -ne $ownServer.Key)
    {
       $body += “WRONG”
    }
    Else
    {

      $body += “OK”
    }
   $body += "`n" #Zeilenumbruch, eventuell muss es $body += "`r`n" sein, in der Mail kontrollieren
}

send-mailmessage -to "AN" -from "VON" -subject "BETREFF" -body $body

 

 

 

Link zu diesem Kommentar

@Robert
Fehler 1: Danke - hab ich übersehen

 

Fehler 2: Is mir in diesem Fall bewusst.

Bei mir habe ich noch eine Erweiterung drin, das ich die Logfile gleich am Anfang komlett lösche und die Datei neu erstelle (was aber nicht notwendig ist das >> im Bedarfsfall die Datei auch neu erstellt, wenn nicht vorhanden)

 

Danke :)

Link zu diesem Kommentar

@ Alith Anar

Besten Dank für deine Hilfe.

 

Ich habe das Script etwas verändert. Mit dem Ergebnis bin ich nun zufrieden ;-)

Erweitern bzw. verändern kann man es immer noch...

 

So sieht es im Moment aus:

 

$Log = "c:\Logfile.txt"
Get-MailboxDatabase | Sort Name | ForEach{
    $db = $_.Name
    $curServer = $_.Server.Name
    $ownServer = $_.ActivationPreference | ? {$_.Value -eq 1}
    If ($curServer -ne $ownServer.Key)
    {
       Write-Output “$db on $curServer should be on $($ownServer.Key) : WRONG” >> $Log
    }
    Else
    {
       Write-Output “$db on $curServer should be on $($ownServer.Key) : OK” >> $Log
    }
}

$datei = Get-content C:\Logfile.txt
Send-MailMessage -To "administrator@contoso.com" -From "test@xyz.com" -Subject "DatenbankCheck" -Body ($datei | out-string) -smtpServer "EX01.contoso.com"

Remove-Item c:\Logfile.txt
 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...