Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PowerShell - Verschiedene Mitteilungen in einer Mail-Funktion

Frage Entwicklung Batch & Shell

Mitglied: tray-park

tray-park (Level 1) - Jetzt verbinden

09.12.2010, aktualisiert 09:03 Uhr, 7413 Aufrufe, 14 Kommentare

Windows Server 2008 R2

Ich möchte mit der PowerShell ein Skript schreiben, mit welchem ich mit Hilfe einer If- Else Abfrage meiner Mail-Funktion verschiedene Werte übergebe.

Hi,

ich überprüfe mit meinem Skript, ob ein Programm ein aktuelles Logfile geschrieben hat.
Das Programm schreibt das Logfile im Format tt.mm.yyyy.log

Mein Skript sieht bisher so aus:
01.
        $Hostname = "Rechner" 
02.
    # SMTP Server IP 
03.
        $SMTPHostIP = "0.0.0.0" 
04.
    # Absender E-Mail Adresse 
05.
        $Absender = "test@example.com" 
06.
    # Empfänder E-Mail Adresse 
07.
        $Empfaenger = "tray@example.com" 
08.
     
09.
# Variablen für Funktion "Status" # 
10.
    # Variablen für das Senden der Software-Log als Anhang 
11.
     
12.
        # Datumsdefinition Software-Log  
13.
            $LogFileDatum = get-date -uformat "%d.%m.%Y.log" 
14.
        # Pfad zum Software-Log  
15.
            $LogFilePfad = "d:\Software\$LogFileDatum" 
16.
# ------------------------------------------------------------------------------------------------------------------ # 
17.
 
18.
# Anfang Funktion Status 
19.
 
20.
    function Send-Status($Softwarename) 
21.
22.
        $SmtpClient = new-object system.net.mail.smtpClient 
23.
        $MailMessage = new-Object system.net.mail.mailmessage 
24.
        $att = new-object Net.Mail.Attachment($LogFilePfad) 
25.
        $SmtpClient.Host = $SMTPHostIP 
26.
        $mailmessage.from = $Absender 
27.
        $mailmessage.To.add($Empfaenger) 
28.
        $mailmessage.Subject = “$BodyJobInfo” 
29.
        $MailMessage.IsBodyHtml = $true 
30.
        $mailmessage.Body = "$Software" 
31.
        $mailmessage.Attachments.Add($att) 
32.
        $smtpclient.Send($mailmessage) 
33.
34.
 
35.
# Ende Funktion Status 
36.
# ------------------------------------------------------------------------------------------------------------------ # 
37.
 
38.
# Status der Software wird gesendet 
39.
 
40.
        if (test-path $LogFilePfad) 
41.
42.
            $BodyJobInfo = "OKAY Software funktioniert" 
43.
			write-host "Sende Mail Software-Okay" 
44.
           Send-Status $Software $BodyJobInfo 
45.
46.
     
47.
        else 
48.
49.
            $BodyJobInfo = "ERROR Software funktioniert nicht" 
50.
            write-host "Sende Mail Software-Nicht-Okay" 
51.
            Send-Status $Software $BodyJobInfo 
52.
53.
# ------------------------------------------------------------------------------------------------------------------ #  
Problem ist nun , dass mir die PS einen Fehler ausgibt, wenn das Logfile anders als definiert heißt oder nicht existiert.
01.
New-Object : Ausnahme beim Aufrufen von ".ctor" mit 1 Argument(en):  "Die Datei "K:\2ChartaWork\Logs\jobinstest\09.12.20102.log" konnte nicht gefunden werden." 
02.
Bei C:\Users\Administrator\Desktop\2Charta\Funktionen.ps1:37 Zeichen:26 
03.
+         $att = new-object <<<<  Net.Mail.Attachment($JobDateiPfad) 
04.
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException 
05.
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand 
06.
  
07.
Ausnahme beim Aufrufen von "Add" mit 1 Argument(en):  "Der Wert darf nicht NULL sein. 
08.
Parametername: item" 
09.
Bei C:\Users\Administrator\Desktop\2Charta\Funktionen.ps1:44 Zeichen:37 
10.
+         $mailmessage.Attachments.Add <<<< ($att) 
11.
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException 
12.
    + FullyQualifiedErrorId : DotNetMethodException
Was mache ich hier falsch?

Freue mich auf jede Antwort.

Grüße



Tray
Mitglied: Miyamoto
09.12.2010 um 10:20 Uhr
Hi,
das Problem ist folgendes:
Du versuchst eine Datei zu versenden die nicht existiert.
Du kannst folgendes machen, einfach eine IF Bedingung in deine "Send-Status" Funktion, den müsste es funktionieren.
01.
# ------------------------------------------------------------------------------------------------------------------ # 
02.
 
03.
# Anfang Funktion Status 
04.
 
05.
    function Send-Status($Softwarename) 
06.
07.
        $SmtpClient = new-object system.net.mail.smtpClient 
08.
        $MailMessage = new-Object system.net.mail.mailmessage 
09.
        if (test-path $LogFilePfad) 
10.
11.
            $att = new-object Net.Mail.Attachment($LogFilePfad) 
12.
13.
        $SmtpClient.Host = $SMTPHostIP 
14.
        $mailmessage.from = $Absender 
15.
        $mailmessage.To.add($Empfaenger) 
16.
        $mailmessage.Subject = “$BodyJobInfo” 
17.
        $MailMessage.IsBodyHtml = $true 
18.
        $mailmessage.Body = "$Software" 
19.
        $mailmessage.Attachments.Add($att) 
20.
        $smtpclient.Send($mailmessage) 
21.
22.
 
23.
# Ende Funktion Status 
24.
# ------------------------------------------------------------------------------------------------------------------ #
Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
13.12.2010 um 08:10 Uhr
Es kommt die gleiche Fehlermeldung.
Bitte warten ..
Mitglied: Miyamoto
13.12.2010 um 12:12 Uhr
Hi,
versuch das Bitte noch mal:
01.
# ------------------------------------------------------------------------------------------------------------------ # 
02.
 
03.
# Anfang Funktion Status 
04.
 
05.
function Send-Status($Softwarename) 
06.
07.
    $SmtpClient = new-object system.net.mail.smtpClient 
08.
    $MailMessage = new-Object system.net.mail.mailmessage 
09.
    if (test-path $LogFilePfad) 
10.
11.
        $att = new-object Net.Mail.Attachment($LogFilePfad) 
12.
13.
    $SmtpClient.Host = $SMTPHostIP 
14.
    $mailmessage.from = $Absender 
15.
    $mailmessage.To.add($Empfaenger) 
16.
    $mailmessage.Subject = “$BodyJobInfo” 
17.
    $MailMessage.IsBodyHtml = $true 
18.
    $mailmessage.Body = "$Software" 
19.
    if (test-path $LogFilePfad) 
20.
21.
        $mailmessage.Attachments.Add($att) 
22.
23.
    $smtpclient.Send($mailmessage) 
24.
25.
 
26.
# Ende Funktion Status 
27.
# ------------------------------------------------------------------------------------------------------------------ #
Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
14.12.2010 um 11:39 Uhr
Cool! danke dir.

Ich hab noch einen else-Zweig untergebracht, damit auch ein anderer Betreff beim Fehlen der Datei angezeigt wird
01.
# ------------------------------------------------------------------------------------------------------------------ # 
02.
 
03.
# Anfang Funktion Status 
04.
 
05.
function Send-Status($Softwarename) 
06.
07.
    $SmtpClient = new-object system.net.mail.smtpClient 
08.
    $MailMessage = new-Object system.net.mail.mailmessage 
09.
    if (test-path $LogFilePfad) 
10.
11.
        $att = new-object Net.Mail.Attachment($LogFilePfad) 
12.
$Subject = "Alles okay" 
13.
14.
else 
15.
16.
$Subject = "Nichts okay" 
17.
18.
    $SmtpClient.Host = $SMTPHostIP 
19.
    $mailmessage.from = $Absender 
20.
    $mailmessage.To.add($Empfaenger) 
21.
    $mailmessage.Subject = “$Subject” 
22.
    $MailMessage.IsBodyHtml = $true 
23.
    $mailmessage.Body = "$Software" 
24.
    if (test-path $LogFilePfad) 
25.
26.
        $mailmessage.Attachments.Add($att) 
27.
28.
    $smtpclient.Send($mailmessage) 
29.
30.
 
31.
# Ende Funktion Status 
32.
# ------------------------------------------------------------------------------------------------------------------ #
Wie kann ich denn eigentlich einer Funktion meherer Werte übergeben?

Ich möchte nämlich, dass statt eines leeren Body´s noch das Ergebnis z.B. eines Pings eingefügt wird. Am besten mit Zeilenumbruch.

So würde ich es bisher machen:
01.
        $ping1 = ping Server 1 
02.
	$ping2 = ping Server2 
03.
	$ping3 = ping Server3 
04.
	 
05.
		Write-Host "Sende Status Software" 
06.
		Send-Status $Software $ping1 ping2 ping3
Und dann das Ergebnis in die Funktion übergeben
01.
function Send-Status($Softwarename, $ping1, $ping2, $ping3) 
02.
03.
    $SmtpClient = new-object system.net.mail.smtpClient 
04.
... ... 
05.
   $mailmessage.Body = "$ping1 ||  $ping2 || $ping3" 
06.
... 
07.
}
Wie man einen Zeilenumbruch macht, weiß ich leider nicht.

Als Ergebnis erhalte ich bloß den ersten Ping.

Grüße
Bitte warten ..
Mitglied: Miyamoto
14.12.2010 um 12:02 Uhr
Hi,
also um eine Funktion mehrere Parameter zu übergeben macht mal folgendes:
01.
function f1 ($p1, $p2) 
02.
03.
write-host $p1 
04.
write-host $p2 
05.
}
Der Aufruf der Funktion geschieht dann wie folgt:
01.
f1("Hallo","Welt")
Einen Zeilenumbruch machst man so:
01.
echo "Hallo `r`n Welt"
Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
14.12.2010 um 12:46 Uhr
Also so?

Funktion
01.
function Send-Status($Softwarename, $ping1, $ping2, $ping3) 
Funktionsaufruf
01.
Send-Status ($Software,"ping Server1","ping Server2","ping Server3")
Funktion für Mailversand
01.
 $mailmessage.Body =  " $ping1 `r`n $ping2 `r`n $ping3"
Gruß
Tray
Bitte warten ..
Mitglied: Miyamoto
14.12.2010 um 13:32 Uhr
Ja , so müsste es funktionieren.

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
14.12.2010 um 13:57 Uhr
Leider nicht.

Ich schätze es hat im Funktionsaufruf was mit den "" zu tun. Ohne diese wirft die PowerShell mir aber Fehler
01.
Fehlender Ausdruck nach ",". 
02.
...
Grüße
Bitte warten ..
Mitglied: Miyamoto
15.12.2010 um 09:00 Uhr
Hi,
also ich habe es noch mal in einem kleinen versuch nach gebaut.
Also Funktion und Aufruf und so, und bei mir klappt es so Fehler frei:
01.
#Funktion 
02.
function Send-Status($Softwarename, $ping1, $ping2, $ping3) { 
03.
    Write-Host $Softwarename 
04.
    Write-Host $ping1 
05.
    Write-Host $ping2 
06.
    Write-Host $ping3 
07.
    Write-Host  
08.
    Write-Host $Softwarename "`r`n" $ping1 "`r`n" $ping2 "`r`n" $ping3 
09.
 
10.
11.
 
12.
# Variablen 
13.
$Software="notepade" 
14.
$pingServer1="127.0.0.1" 
15.
$pingServer2="localhost" 
16.
 
17.
#Funktionsaufruf 
18.
Send-Status ($Software, $pingServer1, $pingServer2,"192.168.0.1")
Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
04.01.2011 um 13:56 Uhr
Hi,

irgendwas läuft schief bei mir. Wenn ich es so mache wie du, dann ist der Body der Mail leer.

Wenn ich die Variablen in die Funktion einbaue, sagt mir die PowerShell was von einem unerwarteten Token. Lasse ich "`r`n" weg und trenne die Variablen mit einem Komma, bekomme ich nur für den ersten Ping ein Ergebnis.

Bei dem auch nur die erste Zeile des Kommandos. Also "Ping wird ausgeführt für localhost [::1] mit 32 Bytes Daten: Antwort von ::1: Zeit"

Sollte ich die Pings in einem Array unterbringen damit das funktioniert?

Grüße Tray
Bitte warten ..
Mitglied: Miyamoto
05.01.2011 um 09:26 Uhr
Hi,
kannst du mir den mal bitte Posten was du bis jetzt hast.
Damit ich es mir mal anschauen kann.

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
06.01.2011 um 12:05 Uhr
Hi,

danke für die Rückmeldung.
01.
function Send-Status($Softwarename) 
02.
03.
	$ping1 = ping Server1 
04.
	$ping2 = ping localhost 
05.
	$ping3 = ping 127.0.0.1 
06.
	$ping4 = ping Server4 
07.
	 
08.
    $SmtpClient = new-object system.net.mail.smtpClient 
09.
    $MailMessage = new-Object system.net.mail.mailmessage 
10.
	$jobTest = get-date -uformat "%d.%m.%Y.log" 
11.
	$LogFilePfad = d:\Software\$jobTest" 
12.
    if (test-path $LogFilePfad) 
13.
14.
        $att = new-object Net.Mail.Attachment($LogFilePfad) 
15.
		$Subject = "Alles okay" 
16.
17.
	else 
18.
19.
		$Subject = Nichts okay" 
20.
21.
    $SmtpClient.Host = $SMTPHostIP 
22.
    $mailmessage.from = $Absender 
23.
    $mailmessage.To.add($Empfaenger) 
24.
    $mailmessage.Subject = $Subject 
25.
    $MailMessage.IsBodyHtml = $true 
26.
    $mailmessage.Body = "$ping1, $ping2, $ping3, $ping4" 
27.
    if (test-path $LogFilePfad) 
28.
29.
        $mailmessage.Attachments.Add($att) 
30.
31.
    $smtpclient.Send($mailmessage) 
32.
}
Bitte warten ..
Mitglied: Miyamoto
06.01.2011 um 13:57 Uhr
Hi,
ich habe noch eine Idee, füge mal vor der Zeile 26 folgendes ein:
01.
$mailBody=$ping1+"`r`n"+$ping2+"`r`n"+$ping3+"`r`n"+$ping4
und ersetze die Zeile 26 mit folgendem:
01.
$mailmessage.Body = $mailBody
Das hat in meinem kleinen versuch geklappt.

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
02.02.2011 um 16:37 Uhr
Hi,

ich habe beim Funktionsaufruf einen Fehler gemacht.

Ich habe nun die Klammern und die Kommas weg gelassen und es funktioniert erst einmal soweit.
01.
Send-Status $Software "ping Server1" "ping Server2" "ping Server3"
Bitte warten ..
Ähnliche Inhalte
Entwicklung
Powershell: Timer-Funktion und Progressbar-Funktion
gelöst Frage von SaschaRDEntwicklung8 Kommentare

Hallo zusammen, ich benötige bei 2 Funktionen in Powershell etwas Unterstützung: Fall-1: Ich habe eine Timer-Funktion die eine Anzahl(X) ...

Batch & Shell
Powershell: Parameter einer Funktion soll eine Funktion aufrufen
gelöst Frage von SaschaRDBatch & Shell3 Kommentare

Hallo zusammen, mein Ziel ist es die Zeitdauer einer Prozesses zu ermitteln. Dafür ist die folgende Funktion zuständig:Leider wird ...

Batch & Shell
Powershell Funktion Ausgabe in Datei
gelöst Frage von schicksalBatch & Shell2 Kommentare

Hallo alle zusammen, Ich habe hier ein kleines Script, dessen Ausgabe würde ich gerne in eine Logdatei speichern. Ich ...

Entwicklung
Powershell Funktion Pipeline oder nicht
gelöst Frage von H41mSh1C0REntwicklung12 Kommentare

Hi@All, ich steh grad vor der Entscheidung ob pipeline oder nicht. Momentan führe ich Scripte immer Blockweise aus den ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 5 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 8 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 8 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 12 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...