Powershell mehrere Attachments (unbekannt) versenden

Retsam-Master

Banned
Registriert
Jan. 2019
Beiträge
1.100
hallo Leute

Ich möchte über Powershell eine Mail mit mehreren unbekannten (namentlich) attachments versenden.
ein Attachment is ja kein Problem mit der Bezeichnung *.jpg
wenn aber 2 da drin sind die eine jpg endung haben kappiert powershell nix mehr
kommt nur sowas:

Send-MailMessage : Der Vorgang kann nicht ausgeführt werden, weil der aufgelöste Pfad mehrere Dateien angibt. Dieser Befehl kann nicht auf mehrere Dateien angewendet
werden.

Wie umgehe ich das Problem?
 
wieso nö? Du kannst die Dateien doch per Powershell zippen, das Archiv verschicken und danach lokal wieder löschen?
 
Such einfach mal nach "Send-Mailmessage multiple attachments"...
Die Dateinamen müssen mit
Code:
-Attachments "c:\datei1.txt", "c:\datei2.txt"
hinzugefügt werden.
 
Code:
Get-Help Send-MailMessage

NAME
    Send-MailMessage

SYNTAX
    Send-MailMessage [-To] <string[]> [-Subject] <string> [[-Body] <string>] [[-SmtpServer] <string>] -From
    <string> [-Attachments <string[]>] [-Bcc <string[]>] [-BodyAsHtml] [-Encoding <Encoding>] [-Cc <string[]>]
    [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Priority {Normal | Low |
    High}] [-Credential <pscredential>] [-UseSsl] [-Port <int>] [<CommonParameters>]


ALIASES
    None


REMARKS
    Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
        -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
        -- To view the Help topic for this cmdlet online, type: "Get-Help Send-MailMessage -Online" or
           go to https://go.microsoft.com/fwlink/?LinkID=135256.
-Attachments ist ein Array, ergo das was @kartoffelpü gesagt hat.
Code:
Send-MailMesage -Attachments "C:\anhang a.txt","D:\anhang b.txt","E:\nächster\anhang\c.txt"
 
Wiederhole mich gerne: ich kenn die dateinamen nicht
 
Hab sowas hier:
$files = get-childitem "\\Path\test\*.txt"
$body = @()
$attachments = @()
foreach($file in $files){
$filename = [system.io.path]::GetFileName($file.FullName)
$attachments += $file.fullname

}
$body = $body | Out-String

Das hole ich das in der mail mit $attachments ab
leider funktioniert es nicht ganz.
Im Pfad kommen alle dateien ungetrennt vor zb. "datei1datei2datei3" etc. es müsste ja sowas wie "datei1, datei2, datei3" sein
 
Ich kenne mich mit Powershell zwar gar nicht aus, aber ich denke das Problem liegt wohl in der Zeile
$attachments += $file.fullname
Du hängst hier die Dateinamen ohne Trennung aneinander. Ich denke wenn du dieses Zeile änderst in
$attachments += $file.fullname + ";"
Solltest Du die Dateinamen durch Semikolon getrennt vorliegen haben
 
AgiOli schrieb:
Ich kenne mich mit Powershell zwar gar nicht aus, aber ich denke das Problem liegt wohl in der Zeile
$attachments += $file.fullname
Du hängst hier die Dateinamen ohne Trennung aneinander. Ich denke wenn du dieses Zeile änderst in
$attachments += $file.fullname + ";"
Solltest Du die Dateinamen durch Semikolon getrennt vorliegen haben
@AgiOli
Er macht zwar nach jedem Filename so ein , oder ; aber es sieht dan das ganze so erste datei= "datei1, datei2, datei3,"
Das Problem hier ist das alle 3 immernoch gelistet werden mit dem komma aber dies gesammt als 1 Datei angsehen wird

@sikarr
schön wärs :D
 
Code:
Send-MailMessage `
  -To to@domain.tld `
  -Subject test `
  -Body test `
  -SmtpServer mail.domain.tld `
  -From from@domain.tld `
  -UseSsl `
  -Attachments (Get-ChildItem ($env:TEMP + "\test\*.txt")) `
  -Credential (New-Object pscredential("from@domain.tld",(ConvertTo-SecureString "passwort" -AsPlainText -Force)))

765885


Geht problemlos.
 
@Yuuri
Ich sehe einen Teil des Problems...
Das Skript versucht über C:......\dann auf den UNC serverpath\ zuzugreifen was ja nicht existiert
Wie löse ich das Problem?
also mein path ist \\srv\freigabe
er macht C:\.....\srv\freigabe

und was heisst: $env:TEMP?

@sikarr
Das geht garantiert nicht, habs versucht ...mit einer Datei klappts mit mehreren nicht
 
Zuletzt bearbeitet:
Nein funktioniert genauso. So lange es sich um einen UNC-Pfad handelt...
Code:
$from        = "email1@domain.tld"
$to          = "email2@domain.tld"
$subject     = "Test via PowerShell"
$body        = "Das ist ein Test via PowerShell Script"
$server      = "mail.domain.tld"
$attachments = (dir \\host\share\path\*.txt)
$credential  = New-Object pscredential($from, (ConvertTo-SecureString "passwort" -AsPlainText -Force))

Send-MailMessage -To $to -Subject $subject -Body $body -SmtpServer $server -From $from -Attachments $attachments -Credential $credential -UseSsl -Verbose

765969


So lange du eine Ausgabe mit Dateien hast, klappt das ebenso:
Code:
PS C:\Users\claW> dir \\host\share\*.txt


    Directory: \\host\share


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------       21.03.2019     16:45              0 bar.txt
------       21.03.2019     16:45              0 baz.txt
------       21.03.2019     16:45              0 foo.txt
------       21.03.2019     17:22              0 gna.txt
------       21.03.2019     17:22              0 gnu.txt
 
@Yuuri

Krass...
Funktioniert nicht.
sagen wir mein Pfad ist: \\Server\path\test
das hat dan 3 Inhalte

bei mir sagt er IMMER sowas:
Ein teil des Pfades "\\Server\path\test\server\path\test\server\path\test" konnte nicht gefunden werden.

Wenn ich direkt im powershell "dir \\Server\paht\test" eintippe, sehe ich alle 3 Dateien normal gelistet.

Hier mein Code

PowerShell:
$cred = New-Object System.Management.Automation.PSCredential "test@test.com", $pw
$pw = Get-Content ("J:\passwort.txt") | ConvertTo-SecureString
$attachments = (dir \\srv\path\test\*.hallo)
Send-MailMessage -Credential $cred -SmtpServer 'smtp.office365.com' -Port '587' -Attachments "$attachments" -to "other@test.com" -from "test@test.com," -UseSsl -Subject "Test" -body "Test" -encoding ([System.Text.Encoding]::UTF8)
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben