.txt Dateien aus Ordner in Array laden.
Hallöchen,
habe wieder einmal ein kleines Problemchen, welches
hoffentlich durch Eure Hilfe schnell als erledigt markiert
werden kann.
Ich hab einen Ordner in dem durch einen Task eine
ungewisse Zahl .txt Dateien hinein kopiert werden.
Diese sollen wiederum durch eine .ps1 per Mail
versand werden. Das versenden von einer .txt
klappt Problemlos. Nur wie bekomme ich mehrere
Textdateien in ein Array um diese dann an die
zu übergeben un zu versenden. Also als Attachment.
Muss jetzt keine Arraylösung sein. Für mich aber der
plausibelste Ansatz.
Ich weiß also schon mal wieviele Dateien ins Array müssen.
Nur wie gesagt, bekomme ich jetzt diese X .txt Dateien ins Array????
Danke schon mal fürs grübeln und posten Eurer Vorschläge.
Zwischenzeitlich habe ich schon mal herausgefunden, dass $Count bereits
mit den Namen der .txt Dateien gefüllt ist.
Wäre nur noch die Frage, wie ich diese aneinandergereit als Variable speichere.
$TextDateiEn = $Count+$Count[1]+ x --- für den Mailversand
habe wieder einmal ein kleines Problemchen, welches
hoffentlich durch Eure Hilfe schnell als erledigt markiert
werden kann.
Ich hab einen Ordner in dem durch einen Task eine
ungewisse Zahl .txt Dateien hinein kopiert werden.
Diese sollen wiederum durch eine .ps1 per Mail
versand werden. Das versenden von einer .txt
klappt Problemlos. Nur wie bekomme ich mehrere
Textdateien in ein Array um diese dann an die
$Attachment = new-object Net.Mail.Attachment($TextDateiEn)
zu übergeben un zu versenden. Also als Attachment.
Muss jetzt keine Arraylösung sein. Für mich aber der
plausibelste Ansatz.
$Count = @(Get-ChildItem $Pfad -include "*.txt")
$Count.gettype()
$Count1=$Count.count
$Count1
Ich weiß also schon mal wieviele Dateien ins Array müssen.
Nur wie gesagt, bekomme ich jetzt diese X .txt Dateien ins Array????
Danke schon mal fürs grübeln und posten Eurer Vorschläge.
Zwischenzeitlich habe ich schon mal herausgefunden, dass $Count bereits
mit den Namen der .txt Dateien gefüllt ist.
Wäre nur noch die Frage, wie ich diese aneinandergereit als Variable speichere.
$TextDateiEn = $Count+$Count[1]+ x --- für den Mailversand
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 206225
Url: https://administrator.de/contentid/206225
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
6 Kommentare
Neuester Kommentar
wenn es denn ein Array sein soll/muss:
oder alternativ noch als Hashtable ohne ein .Net-Object :
$arr = new-object collections.arraylist
dir c:\Pfad\*.txt | %{$arr.Add($_.FullName)}
$arr | %{$Mail.Attachments.Add($_)}
$hashTable = @{}
$i = 0
dir *.csv | %{$hashTable.Add($i,$_.FullName); $i +=1}
$hashTable.GetEnumerator() | %{$Mail.Atachments.Add($_.Value)}
Zitat von @FunkerVogt:
Aber vielleicht kennst Du oder jemand anderes eine alternative Methode/Möglichkeit,
dem Attachmentfile (Net.Mail.Attachment($TextDateiEn)) per Zuweisung
mehrere Dateien unterzujubeln. Quasi $TextDateiEn = $Datei + $Datei2 + $Dateix.?
geht immer nur One-by-One ...Aber vielleicht kennst Du oder jemand anderes eine alternative Methode/Möglichkeit,
dem Attachmentfile (Net.Mail.Attachment($TextDateiEn)) per Zuweisung
mehrere Dateien unterzujubeln. Quasi $TextDateiEn = $Datei + $Datei2 + $Dateix.?
poste halt deinen ganzen Code dann finden wir den Fehler.
OK zu dem Code sag ich jetzt mal nix, weil jeder mal anfängt !
habe nur die IF-Bedingung rausgenommen die überprüft wie viele Dateien vorhanden sind, die brauchen wir bei dem Befehl der verwendet wird nicht. Den Rest habe ich so gelassen wie er ist da wären zu viele Kommentare nötig...
Warum es bei dir nicht funktioniert hat ist weil du wahrscheinlich für das versenden eine Function benutzt und das Mail-Object nicht Public deklariert hast. Habe Dir eine sendmail-Function gebaut der du die Attachments einfach als Liste von Dateien übergibst (bzw. die Ausgabe des get-childitem-Befehls verwenden kannst).
Grüße Uwe
habe nur die IF-Bedingung rausgenommen die überprüft wie viele Dateien vorhanden sind, die brauchen wir bei dem Befehl der verwendet wird nicht. Den Rest habe ich so gelassen wie er ist da wären zu viele Kommentare nötig...
Warum es bei dir nicht funktioniert hat ist weil du wahrscheinlich für das versenden eine Function benutzt und das Mail-Object nicht Public deklariert hast. Habe Dir eine sendmail-Function gebaut der du die Attachments einfach als Liste von Dateien übergibst (bzw. die Ausgabe des get-childitem-Befehls verwenden kannst).
Function sendmail($FROM,$TO,$SUBJECT,$BODY,$ATTACHMENTS){
$SMTPHOST = "mailserver"
$SMTPPORT = 25
$SMTPClient = New-object System.Net.Mail.SmtpClient($SMTPHOST,$SMTPPORT)
$SMTPClient.EnableSsl = $true
$Mail = new-object System.Net.Mail.MailMessage
$Mail.from = $FROM
$Mail.to.add($TO)
$SMTPUSER = "SMTPUSERNAME"
$SMTPPass = "SUPERGEHEIMESPASSWORT"
$SMTPClient.Credentials = new-object System.Net.NetworkCredential($SMTPUSER,$SMTPPass)
$Mail.Subject = $SUBJECT
$Mail.Body = $BODY
if ($ATTACHMENTS -ne $NULL){
foreach ($att in $ATTACHMENTS){
$Mail.Attachments.Add($att.FullName)
}
}
$SMTPClient.Send($Mail)
}
$Datei = ""
$Pfad2 = Get-Location
$fileItem = Get-Item "*.txt"
$filename = $fileItem.Name
# liefert den übergeordneten Ordner
$Pfad3 = Split-Path $Pfad2 -Parent
$Pfad4 = Split-Path $Pfad2 -leaf
# prüft ob im Ordner min 1 .txt Datei vorhanden ist
$CheckDat = $Pfad3 + "\" + $Pfad4 + "\*.txt"
# zählt die Anzahl der .txt Dateien im Ordner
$Count = @(Get-ChildItem $CheckDat -include "*.txt")
$Count.gettype()
$Count1=$Count.count
# das hier wurde eingefügt
$file_attachments = get-childitem -Path $Pfad2 -Filter *.txt
#-------------------------
# Mailversand NEU --------------
sendmail "der@sender.com" "der@empfaenger.com" "DEIN BETREFF" "DER INHALT" $file_attachments
# ------------------------------
Grüße Uwe