Jump to content

Ausgabe per E-Mail versenden


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 habe ein Problem bei einem kleinen PowerShell Script. Ziel ist es eine Ausgabe eines PowerShell Befehels per E-Mail zuu versenden. Wenn möglich hätte ich gern die Ausgabe im Body und nicht als Anhang.

 

So weit bin ich schon.

 

1) Ausagbe in eine Variable schreiben

$log=(Get-ChildItem C:\Backup | Sort-Object LastWriteTime)

 

 

2) E-Mailvesand

send-mailmessage -from [ABSENDER] -to [EMPFÄNGER] -subject [BETREFF] -body $log -smtpServer [MAILSERVER]

 

 

Es kommt jedoch folgende Fehlermeldung:

Send-MailMessage : "System.Object[]" kann nicht in den Typ "System.String" konvertiert werden, der für den Parameter "Body" erforderlich ist. Die angegebene Methode wird nicht unterstützt.

 

 

Gibt es evt. einen anderen Ansatz?

 

Danke und Grüße Sebastian

Link zu diesem Kommentar

Ja, du bekommst ein Objekt zurück vom oberen Befehl, von dem musst du den String verwenden. I.d.R. reicht ein ".toString()" am Ende, evtl. jedoch gibt es auch eine Eigenschaft, genau den String enthält. Zeig bitte mal was du genau ausgeführt hast. Gruß Fresh



Ah, sorry erst jetzt genau geguckt ;)

 

Also wenn du $log | Get-Member schreibst, siehst du alle Eigenschaften. Dort sind ein paar die interessant sind für dich. Probier mal:

 

 

send-mailmessage -from [ABSENDER] -to [EMPFÄNGER] -subject [BETREFF] -body $log.Fullname -smtpServer [MAILSERVER]
Link zu diesem Kommentar

Hallo Fresh,

 

vielen Dank für deine Antwort.

 

Ich habe deinen PowerShell Vorschlag mal ausgeführt, es kommt folgende Meldung:

 

Send-MailMessage : Das Argument für den Parameter "Body" kann nicht überprüft werden. Das Argument ist NULL oder leer.
Geben Sie ein Argument an, das nicht NULL oder leer ist, und führen Sie dann den Befehl erneut aus.
Bei Zeile:1 Zeichen:137
+ send-mailmessage -from [MAILSERVER] -to [EMPFÄNGER] -subject "Backup PST-File" -body <<<<  $pstlog.Fullname -smtpServer [MAILSERVER]
    + CategoryInfo          : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SendMailMessage

 

Der Inhalt der Variable "log" passt.

 

 

 

Grüße

Sebastian

Link zu diesem Kommentar

Du meintest bestimmt:

 

 $logstring = $log | Out-String

Anschließend habe ich Send-MailMessage ohne ".fullname" ausgeführt, erhalte jedoch wieder eine Fehlermeldung:

 

Send-MailMessage : "Discoverysuchpostfach.pst Administrator.pst" kann nicht in den Typ "System.String" konvertie
rt werden, der für den Parameter "Body" erforderlich ist. Die angegebene Methode wird nicht unterstützt.
Bei Zeile:1 Zeichen:137
+ send-mailmessage -from [MAILSERVER] -to [EMPFÄNGER] -subject "Backup PST-File" -body <<<< $pstlog.Fullname -smtpServer [MAILSERVER] 
+ CategoryInfo : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException 
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SendMailMessage


Noch als kleine Ergänzung, in der Variablen $log steht eine Ordnerauslage von "get-childitem"

 

    Verzeichnis: C:\Backup\PST


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        16.03.2013     01:01     271360 Discoverysuchpostfach.pst
-a---        16.03.2013     01:01     271360 Administrator.pst
Link zu diesem Kommentar

Bezüglich dem "Fullname", dass muss irgendwie durch ne falsche Zwischenablage zustande gekommen sein. Ich hatte es auch mal mit probiert.

 

Sobald ich die Variable "log" im send-mailmessage Command in Gänsefüßchen setze klappt der Versand der E-Mail. Jedoch fehlt ein Teil der Ausgabe.

 

Also mein Script schaut nun folgendermaßen aus.

 

PS C:\> $log=(Get-ChildItem C:\Backup\PST | Sort-Object LastWriteTime)

PS C:\> send-mailmessage -from "exchange@contoso.dom" -to "administrator@contoso.dom" -subject
 "Backup PST-File" -body "$log" -smtpServer exchange.contoso.dom

 

Im Body der E-Mail steht nur "Discoverysuchpostfach.pst Administrator.pst "

 

In der Variable log jedoch

 

PS C:\> $log


    Verzeichnis: C:\Backup\PST


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        16.03.2013     01:01     271360 Discoverysuchpostfach.pst
-a---        16.03.2013     01:01     271360 Administrator.pst

 

Anbei auch die zwei Ausgaben

 

PS C:\> Get-Member -Inputobject $log


   TypeName: System.Object[]

Name           MemberType    Definition
----           ----------    ----------
Count          AliasProperty Count = Length
Address        Method        System.Object&, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934...
Clone          Method        System.Object Clone()
CopyTo         Method        System.Void CopyTo(array array, int index), System.Void CopyTo(array array, long index)
Equals         Method        bool Equals(System.Object obj)
Get            Method        System.Object Get(int )
GetEnumerator  Method        System.Collections.IEnumerator GetEnumerator()
GetHashCode    Method        int GetHashCode()
GetLength      Method        int GetLength(int dimension)
GetLongLength  Method        long GetLongLength(int dimension)
GetLowerBound  Method        int GetLowerBound(int dimension)
GetType        Method        type GetType()
GetUpperBound  Method        int GetUpperBound(int dimension)
GetValue       Method        System.Object GetValue(Params int[] indices), System.Object GetValue(int index), System...
Initialize     Method        System.Void Initialize()
Set            Method        System.Void Set(int , System.Object )
SetValue       Method        System.Void SetValue(System.Object value, int index), System.Void SetValue(System.Objec...
ToString       Method        string ToString()
IsFixedSize    Property      System.Boolean IsFixedSize {get;}
IsReadOnly     Property      System.Boolean IsReadOnly {get;}
IsSynchronized Property      System.Boolean IsSynchronized {get;}
Length         Property      System.Int32 Length {get;}
LongLength     Property      System.Int64 LongLength {get;}
Rank           Property      System.Int32 Rank {get;}
SyncRoot       Property      System.Object SyncRoot {get;}

 

PS C:\> $log | Get-Member


   TypeName: System.IO.FileInfo

Name                      MemberType     Definition
----                      ----------     ----------
Mode                      CodeProperty   System.String Mode{get=Mode;}
AppendText                Method         System.IO.StreamWriter AppendText()
CopyTo                    Method         System.IO.FileInfo CopyTo(string destFileName), System.IO.FileInfo CopyTo(s...
Create                    Method         System.IO.FileStream Create()
CreateObjRef              Method         System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)
CreateText                Method         System.IO.StreamWriter CreateText()
Decrypt                   Method         System.Void Decrypt()
Delete                    Method         System.Void Delete()
Encrypt                   Method         System.Void Encrypt()
Equals                    Method         bool Equals(System.Object obj)
GetAccessControl          Method         System.Security.AccessControl.FileSecurity GetAccessControl(), System.Secur...
GetHashCode               Method         int GetHashCode()
GetLifetimeService        Method         System.Object GetLifetimeService()
GetObjectData             Method         System.Void GetObjectData(System.Runtime.Serialization.SerializationInfo in...
GetType                   Method         type GetType()
InitializeLifetimeService Method         System.Object InitializeLifetimeService()
MoveTo                    Method         System.Void MoveTo(string destFileName)
Open                      Method         System.IO.FileStream Open(System.IO.FileMode mode), System.IO.FileStream Op...
OpenRead                  Method         System.IO.FileStream OpenRead()
OpenText                  Method         System.IO.StreamReader OpenText()
OpenWrite                 Method         System.IO.FileStream OpenWrite()
Refresh                   Method         System.Void Refresh()
Replace                   Method         System.IO.FileInfo Replace(string destinationFileName, string destinationBa...
SetAccessControl          Method         System.Void SetAccessControl(System.Security.AccessControl.FileSecurity fil...
ToString                  Method         string ToString()
PSChildName               NoteProperty   System.String PSChildName=Discoverysuchpostfach.pst
PSIsContainer             NoteProperty   System.Boolean PSIsContainer=False
PSParentPath              NoteProperty   System.String PSParentPath=Microsoft.PowerShell.Core\FileSystem::\\srv-bak-...
PSPath                    NoteProperty   System.String PSPath=Microsoft.PowerShell.Core\FileSystem::\\srv-bak-01\bac...
PSProvider                NoteProperty   System.Management.Automation.ProviderInfo PSProvider=Microsoft.PowerShell.C...
Attributes                Property       System.IO.FileAttributes Attributes {get;set;}
CreationTime              Property       System.DateTime CreationTime {get;set;}
CreationTimeUtc           Property       System.DateTime CreationTimeUtc {get;set;}
Directory                 Property       System.IO.DirectoryInfo Directory {get;}
DirectoryName             Property       System.String DirectoryName {get;}
Exists                    Property       System.Boolean Exists {get;}
Extension                 Property       System.String Extension {get;}
FullName                  Property       System.String FullName {get;}
IsReadOnly                Property       System.Boolean IsReadOnly {get;set;}
LastAccessTime            Property       System.DateTime LastAccessTime {get;set;}
LastAccessTimeUtc         Property       System.DateTime LastAccessTimeUtc {get;set;}
LastWriteTime             Property       System.DateTime LastWriteTime {get;set;}
LastWriteTimeUtc          Property       System.DateTime LastWriteTimeUtc {get;set;}
Length                    Property       System.Int64 Length {get;}
Name                      Property       System.String Name {get;}
BaseName                  ScriptProperty System.Object BaseName {get=if ($this.Extension.Length -gt 0){$this.Name.Re...
VersionInfo               ScriptProperty System.Object VersionInfo {get=[System.Diagnostics.FileVersionInfo]::GetVer...
bearbeitet von ablaze
Link zu diesem Kommentar

Hi,

 

also kurz zur Erklärung:

Oberster Befehl zeigt an, welchen Typ $log hat. Die eckigen Klammern [] zeigen an, dass es ein Array (also eine Liste) mit mehreren Objekten ist. Der untere zeigt alle Typen der im Array vorhandenen Objekte an. Durch $log | out-String wandeln wir FileInfo in String um, weil String in den Body-Parameter von Send-Mailmessage übergeben werden muss.

 

Wenn also in der Mail etwas abgeschnitten ist, kann das verschiedene Ursachen haben:

 

- Out-String schneidet etwas ab

- SendMailMessage hat im Body-Parameter eine Beschränkung

- weitere Gründe...

 

Probier mal bitte einfach einen sehr sehr langen String per Mail zu senden. Evtl. mal googeln, ob es da ein Limit gibt. Ansonsten einfach mal nach dem Out-String die Variable ausgeben (einfach den Variablen Namen eingeben).

 

Gruß

Fresh

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...