Powershellscript ändert CSV Codierung?
Moin zusammen,
ich habe mir (ich glaube es war tatsächlich hier) ein Powershellscript besorgt, mit dem ich automatisiert Emailanhänge speichern kann.
Ursprünglich haben wir von einem FTP Server XML-Dateien in unser ERP gepollt - nun wurde die EDV dort von XML per FTP auf CSV per Email umgestellt und der Anhang sollte automatisiert gespeichert werden um ihn dort abzuholen. Funktioniert erstklassig mit dem Script - eigentlich .
Irgendetwas wird beim ablösen aus der Email verändert, sodass die Codierung der Sonderzeichen nicht mehr stimmt. Statt ö/ä werden ?? von der CSV genutzt. Ich habe mir diverse Infos zum Thema UTF8, ISO 8859 etc durchgelesen, aber irgendwie verstehe ich dieses Kapitel überhaupt nicht - ein "?" ist in allen Tabellen hexadezimal F3...(einegworfen - falls jemand ein leicht verständliches tutorial dazu kennt immer ehr damit^^).
Die Frage : Kann mir jemand helfen, dem Script beizubringen die Codierung nicht zu ändern und tatsächlich den Anhang "as it is" zu speichern?
Gruß
Unreal
ich habe mir (ich glaube es war tatsächlich hier) ein Powershellscript besorgt, mit dem ich automatisiert Emailanhänge speichern kann.
# ---------------------------------
# Anhang-Pfad
$DOWNLOADPATH = 'D:\yourpath\anhang'
# IMAP-Host
$IMAP_HOST = 'imap.yourdomain.de'
# IMAP-Port
$IMAP_PORT = 993
# IMAP USERNAME
$IMAP_USERNAME = 'YOURUSERNAME'
# IMAP PASSWORD
$IMAP_PASSWORD = 'YOURPASSWORD'
# SSL verwenden
$IMAP_USESSL = $true
# ---------------------------------
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}
# IMAPX DLL laden
Add-Type -Path "$PSScriptRoot\ImapX.dll"
# Ordner erstellen, wenn er nicht existiert
if (!(Test-Path $DOWNLOADPATH)){md $DOWNLOADPATH -Force | out-null}
# IMAPX Eigenschaften festlegen
$imap = New-Object ImapX.ImapClient
$imap.Behavior.MessageFetchMode = [ImapX.Enums.MessageFetchMode]::Full
$imap.Host = $IMAP_HOST
$imap.Port = $IMAP_PORT
$imap.UseSsl = $IMAP_USESSL
try{
# Verbinden
$imap.Connect() | out-null
# Login
$imap.Login($IMAP_USERNAME,$IMAP_PASSWORD) | out-null
# ungelesene Nachrichten im Posteingang laden
$messages = $imap.Folders.Inbox.Search("UNSEEN",[ImapX.Enums.MessageFetchMode]::Full,1000)
# wenn es Nachrichten gibt
if($messages.Count -gt 0){
# Für jede Nachricht
foreach ($m in $messages){
# Durchlaufe jedes Attachment
foreach($a in $m.Attachments){
try{
# Ist das Attachment aus einem Grund noch nicht heruntergeladen, lade es
if (!$a.Downloaded){$a.Download()}
# Zieldateiname = Dateiname des Original-Attachments
$targetfile = $a.FileName; $cnt = 1
# Sollte bereits eine Datei mit diesem Zielnamen im Download-Ordner existieren hänge an den Namen so lange eine
# Zahl an _NN bis der Name frei ist.
#----------------------------------------------------------------------------------------------------------------------------------------------
# Irgendwo hier vermute ich das Problem :)
while(Test-Path "$DOWNLOADPATH\$targetfile"){
**$targetfile = "$([IO.Path]::GetFileNameWithoutExtension($a.Filename))_$("{0:00}" -f $cnt)$([IO.Path]::GetExtension($a.Filename))"
$cnt++
}
write-host "Saving Attachment '$targetfile' ($("{0:F3} MB" -F ($a.FileSize / 1MB))) ... " -NoNewline -ForegroundColor Green
$a.Save($DOWNLOADPATH,$targetfile)**
#---------------------------------------------------------------------------------------------------------------------------------------------
Write-Host "Done." -ForegroundColor Green
}catch{
write-Error "Error with Attachment: '$($a.FileName)' of Message with ID '$($m.MessageId)': $($_.Exception.Message)" -EA Continue
}
}
# markiere die Nachricht als gelesen
$m.Seen = $true
}
}else{
# Keine ungelesenen Nachrichten vorhanden
write-host "No unseen message in inbox."
}
# Beende Session
$imap.Disconnect()
}catch{
throw $_
}finally{
$imap.Dispose()
}
Ursprünglich haben wir von einem FTP Server XML-Dateien in unser ERP gepollt - nun wurde die EDV dort von XML per FTP auf CSV per Email umgestellt und der Anhang sollte automatisiert gespeichert werden um ihn dort abzuholen. Funktioniert erstklassig mit dem Script - eigentlich .
Irgendetwas wird beim ablösen aus der Email verändert, sodass die Codierung der Sonderzeichen nicht mehr stimmt. Statt ö/ä werden ?? von der CSV genutzt. Ich habe mir diverse Infos zum Thema UTF8, ISO 8859 etc durchgelesen, aber irgendwie verstehe ich dieses Kapitel überhaupt nicht - ein "?" ist in allen Tabellen hexadezimal F3...(einegworfen - falls jemand ein leicht verständliches tutorial dazu kennt immer ehr damit^^).
Die Frage : Kann mir jemand helfen, dem Script beizubringen die Codierung nicht zu ändern und tatsächlich den Anhang "as it is" zu speichern?
Gruß
Unreal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 373776
Url: https://administrator.de/contentid/373776
Ausgedruckt am: 22.11.2024 um 07:11 Uhr
5 Kommentare
Neuester Kommentar
Ich schätze du nutzt eine verbuggten Imapx.dll. Da gibt es einige Versionen die Probleme mit dem Attachmenthandling bei manchen Mails haben.
Datei einfach vor dem Versenden zippen oder eines der vielen NET Controls nutzen ...
https://www.google.de/search?q=.net+imap+library
https://www.google.de/search?q=.net+imap+library