vtcn05 Posted August 5, 2022 Author #26 Share Posted August 5, 2022 Ich hab den Fehler gefunden. Unser Powershell-Skript, welches die Telefonnummer vom Dienstplan-Server abholt, schrieb die Telefonnummer mit dem Befehlt "Out-File -FilePath $Output" in die Datei, welche daraufhin UTF-16 kodiert war (was die Swyx nicht verarbeiten konnte). Mit Anpassung auf "Out-File -FilePath $Output -Encoding ASCII" kann die Swyx die Datei lesen und schreibt die richtige Nummer in die Variable. Nochmals herzlichen Dank, an Dich @Tom Wellige. Ohne Deine Hilfe wäre ich längst nicht so weit gekommen 😊 _sync.ps1 $ProcessName = "Sync-Number" $ErrorActionPreference = "Stop" $LocalPath = $PSScriptRoot + "\" $LogfileMonat = Get-Date -Format "yyyy-MM" $Logfile = $LocalPath + "logs\${LogfileMonat}_${ProcessName}.log" $Call = "https://server.tld/_export/phonenumber.php" $PhoneRegex = "^([\+|0-9][0-9]{6,20})$" $MailTo = "it@domain.tld" $MailFrom = $env:computername.ToUpper() + " <$($env:computername.ToUpper())@domain.tld>" $MailServer = "mail.domain.tld" $Types = @( "1;north;tr", "2;north;tr", "1;south;tr", "2;south;tr", "1;;it", "2;;it" ) # Auskommentiert von MJ am 02.08.2022 $ToDo = 0 if (!(Test-Path ${LocalPath}logs)) { New-Item -ItemType Directory ${LocalPath}logs -Force } function WriteToLogfile ([Parameter(ValueFromPipeline = $true)]$LogOutput) { "$(Get-Date -Format "dd.MM.yyyy HH:mm:ss") " + $LogOutput | Out-File -FilePath $Logfile -Encoding default -Append } Try { # Auskommentiert von MJ am 02.08.2022 "--- Starte $ProcessName" | WriteToLogfile foreach ($Type in $Types.GetEnumerator()) { $Number = $Type.Split(";")[0] $Region = $Type.Split(";")[1] $Modul = $Type.Split(";")[2] $Output = $Modul + "_" + $Region + "_" + $Number + ".txt" # Auskommentiert von MJ am 02.08.2022 "Frage Nummer fuer $Output via $Call ab" | WriteToLogfile $OldNumber = Get-Content $Output -ErrorAction SilentlyContinue $Return = Invoke-WebRequest $Call"?modul="$Modul"&number="$Number"®ion="$Region -UseBasicParsing $Content = $Return.Content if ($Content -match $PhoneRegex) { if ($Content -ne $OldNumber) { "Uhr: Dienstplan-Portal liefert neue Rufnummer $Content für $Output" | WriteToLogfile $Content | Out-File -FilePath $Output -Encoding ASCII # Auskommentiert von MJ am 02.08.2022 $ToDo += 1 } <#else { "Nichts zutun!" | WriteToLogfile }#> } else { "Es wurde keine einzelne Telefonnummer erkannt!" | WriteToLogfile $Content | WriteToLogfile #Throw "Es wurde keine einzelne Telefonnummer erkannt!" } } # Write-Host $ToDo # Auskommentiert von MJ am 02.08.2022 if ($ToDo -eq 0) { # Auskommentiert von MJ am 02.08.2022 "Nichts zutun!" | WriteToLogfile # Auskommentiert von MJ am 02.08.2022 } #else { # "--- Ende $ProcessName" | WriteToLogfile #} # Auskommentiert von MJ am 02.08.2022 "--- Ende $ProcessName" | WriteToLogfile } Catch { if ($_.Exception.ItemName) { $ErrorMessage = $_.Exception.Message + " - " + $_.Exception.ItemName } else { $ErrorMessage = $_.Exception.Message } Send-MailMessage -From $MailFrom -To $MailTo -Subject "FEHLGESCHLAGEN - $ProcessName" -SmtpServer $MailServer ` -Body "$ProcessName ist fehlgeschlagen! Fehler --- $ErrorMessage --- aufgetreten zum Zeitpunkt $(Get-Date)" -Attachments $Logfile Break } Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 5, 2022 #27 Share Posted August 5, 2022 1 hour ago, vtcn05 said: Nochmals herzlichen Dank, an Dich @Tom Wellige. Ohne Deine Hilfe wäre ich längst nicht so weit gekommen 😊 Gern geschehen! Freut mich zu lesen, dass nun alles läuft Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 5, 2022 #28 Share Posted August 5, 2022 Ach, noch ein kleiner Hinweis: das Call Routing wird von der Standard Microsoft Scripting Engine ausgeführt. Es ist nicht die SwyxWare, die Probleme mit der Datei hatte. In der Zeile, in der das Skript die Datei öffnet, hatte ich ASCII als Kodirung fest vorgegeben: Set file = fso.OpenTextFile(sFile, fsoForReading, fsoDontCreateIfNotExist, fsoTristateFalse) Der vierte Parameter legt die Kodierung fest. Folgende Werste sind dort möglich: Const fsoTristateUseDefault = -2 ' Opens the file by using the system default. Const fsoTristateTrue = -1 ' Opens the file as Unicode. Const fsoTristateFalse = 0 ' Opens the file as ASCII. Mit fsoTristateTrue solltest Du eine UTF-16 kodierte Datei einlesen können. 1 Link to comment Share on other sites More sharing options...
vtcn05 Posted August 5, 2022 Author #29 Share Posted August 5, 2022 Danke für die Info. Die nächsten Herausforderungen habe ich schon im Kopf, brauche aber noch etwas Zeit dafür 😉 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now