# PowerShell 3.0 Script # EMC² QuickScan Job Script zur automatischen # Abarbeitung und Sortierung von Scan Dateien. # Digital Data # Ludwig-Rinn-Strasse 16 # 35452 Heuchelheim # Tel.: 0641 / 202360 # E-Mail: info@didalog.de # Version 1.0 # Letzte Aktualisierung: 19.08.2014 # Mindestanforderung für dieses Skript: # Microsoft Windows XP SP3 / Server 2008 R2 SP1 -> siehe KB976932 # Microsoft .NET Framework 4.5 -> siehe KB2858728 # Microsoft PowerShell 4.0 -> siehe KB2819745 # WICHTIG: Falls sich dieses Skript nicht ausführen lässt, # muss dieser PS-Befehl noch mit administrativen Rechten ausgeführt werden: # set-executionpolicy unrestricted #Requires –Version 3.0 #----------------------------------------------------------------------------------------------------- ############################ Zusätzliche Assemblys hinzufügen bzw. laden. ############################ #----------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------- ######################################## Variablen definieren. ####################################### #----------------------------------------------------------------------------------------------------- Set-Variable -Name SkriptName -Value (($MyInvocation.MyCommand.Name) -split "\.")[0].ToString() -Scope script Set-Variable -Name SkriptPfad -Value (Split-Path ($MyInvocation.MyCommand.Path)) -Scope script Set-Variable -Name KonfigDatei -Value "$SkriptPfad\$SkriptName`_Settings.ini" -Scope script Set-Variable -Name KonfigWerte -Value $NULL -Scope script Set-Variable -Name ZeitStempel1 -Value $(Get-Date -Format 'ddMMyyyy_HHmmss') -Scope script Set-Variable -Name Fehler -Value $NULL -Scope local Set-Variable -Name LogDatei -Value "$SkriptName`_$ZeitStempel1.log" -Scope script Set-Variable -Name LogEintrag -Value $NULL -Scope local Set-Variable -Name LogPfadListe -Value $NULL -Scope script Set-Variable -Name LogPfad -Value "E:\Dokumentverarbeitung\Logs\WinSped_Touren_Export" -Scope script Set-Variable -Name LogPfadEintrag -Value $NULL -Scope script Set-Variable -Name LogEntfernen -Value 3 -Scope script Set-Variable -Name DateiTrennzeichen -Value "_" -Scope script Set-Variable -Name OutputDatei -Value "E:\FTP\WebFrontEndVCL\WinSped_Export\WinSped_Touren_Export_$ZeitStempel1.xml" -Scope script Set-Variable -Name LogPfadEintrag -Value $NULL -Scope script #----------------------------------------------------------------------------------------------------- ####################################### Funktionen definieren. ####################################### #----------------------------------------------------------------------------------------------------- # Funktion um einen Pfad zu überprüfen und ggf. neu anzulegen, inkl. Fehlerbehandlung. # Ruft Funktion "Func-Write-LogDatei -LogEintrag" auf, um Aktivitäten zu protokollieren. Function Func-Pfadüberprüfung { Param ( [String]$Pfad ) $PfadTest = Test-Path -PathType Container $Pfad Func-Write-LogDatei -LogEintrag "Pfadüberprüfung: Prüfe ob Pfad bereits angelegt ist: $Pfad" IF ($PfadTest -eq "True") { Func-Write-LogDatei -LogEintrag "Pfadüberprüfung: Pfad $Pfad ist bereits angelegt." } ELSE { Func-Write-LogDatei -LogEintrag "Pfadüberprüfung: Pfad $Pfad muss angelegt werden." New-Item -Path $Pfad -ItemType directory -force -ErrorAction SilentlyContinue | Out-Null $PfadTest1 = Test-Path -PathType Container $Pfad Func-Write-LogDatei -LogEintrag "Pfadüberprüfung: Prüfe ob Pfad erfolgreich angelegt werden konnte." IF ($PfadTest1 -eq "True") { Func-Write-LogDatei -LogEintrag "Pfadüberprüfung: Pfad $Pfad wurde erfolgreich angelegt." } ELSE { Func-Write-LogDatei -LogEintrag "FEHLER: Pfad $Pfad konnte nicht angelegt werden." Func-Write-LogDatei -LogEintrag "INFO: Bitte überprüfen Sie Ihre Dateisystem Rechte!" Func-Write-LogDatei -LogEintrag "Programm wird ungeplant beendet." EXIT } } } # Funktion um Logdateien zu schreiben. Function Func-Write-LogDatei { Param ( [string]$LogEintrag ) # Der Fehlerindikator ($?) muss bereits zu Anfang abgefragt werden, # da er von JEDEM funktionierenden Befehl wieder auf True gesetzt wird. IF ($? -ne 'True') { Set-Variable -Name Fehler -Value 1 } IF ($LogPfad -eq $NULL) { Set-Variable -Name LogPfadListe -Value @($LogPfadListe) Set-Variable -Name LogPfadListe -Value ($LogPfadListe += "$SkriptPfad\Logs","$env:temp") FOREACH ($LogPfadEintrag in $LogPfadListe) { $PfadTest = Test-Path -PathType Container "$LogPfadEintrag" Write-Host "Pfadüberprüfung: Prüfe ob LogPfad bereits angelegt ist: $LogPfadEintrag" IF ($PfadTest -eq "True") { Write-Host "Pfadüberprüfung: LogPfad $LogPfadEintrag ist bereits angelegt!" Set-Variable -Name LogPfad -Value $LogPfadEintrag break } ELSE { Write-Host "Pfadüberprüfung: LogPfad $LogPfadEintrag muss angelegt werden." New-Item -Path $LogPfadEintrag -ItemType directory -force -ErrorAction SilentlyContinue | Out-Null $PfadTest = Test-Path -PathType Container $LogPfadEintrag Write-Host "Pfadüberprüfung: Prüfe ob Pfad erfolgreich angelegt werden konnte." IF ($PfadTest -eq "True") { Write-Host "Pfadüberprüfung: Pfad $LogPfadEintrag wurde erfolgreich angelegt." Set-Variable -Name LogPfad -Value $LogPfadEintrag break } ELSE { Write-Host "Pfadüberprüfung: Pfad $LogPfadEintrag konnte nicht angelegt werden." Set-Variable -Name LogPfad -Value $LogPfadEintrag } } } } ELSEIF ($LogPfad -eq $env:temp) { Write-Warning "FEHLER: LogPfad nicht zugreifbar oder nicht korrekt konfiguriert!" Write-Warning "INFO: $LogPfad - wird nun verwendet!" Write-Warning "Programm wird trotzdem fortgesetzt." } Set-Variable -Name LogPfad -Value $LogPfad -scope script Write-Host $LogEintrag Add-content $LogPfad\$LogDatei -value "$(Get-Date -Format 'dd.MM.yyyy')-$(Get-Date -Format 'HH:mm:ss'): $LogEintrag" IF ($Fehler -eq 1) { Write-Host "Fehlermeldung: $error" Add-content $LogPfad\$LogDatei -value "$(Get-Date -Format 'dd.MM.yyyy')-$(Get-Date -Format 'HH:mm:ss'): Fehlermeldung: $error" # Setze Fehlerspeicher zurück $error.clear() } } Function Func-Dateien-zusammensuchen { Param ( [String]$SuchPfad, [String]$SuchDateiEndung ) $Funde = Get-ChildItem -Path $SuchPfad -include *.$SuchDateiEndung -exclude *Test*.$SuchDateiEndung IF ($Funde -eq $NULL) { Func-Write-LogDatei -LogEintrag "Im Pfad $SuchPfad, wurden keine Dateien gefunden!" } ELSE { Func-Write-LogDatei -LogEintrag "Im Pfad $SuchPfad, wurde..." FOREACH ($Fund in $Funde) { Func-Write-LogDatei -LogEintrag "...folgende Datei gefunden: $Fund" } return $Funde } } Function Func-LKZ-prüfen { Param ( [String]$LKZ ) Func-Write-LogDatei "Konvertiere Länderkennzeichen, damit sie ISO 3166 konform ausgegeben werden können." IF ($LKZ -eq 'A') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: AT" Set-Variable -Name LKZ -Value 'AT' } ELSEIF ($LKZ -eq 'B') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: BE" Set-Variable -Name LKZ -Value 'BE' } ELSEIF ($LKZ -eq 'D' -or 'DEU') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: DE" Set-Variable -Name LKZ -Value 'DE' } ELSEIF ($LKZ -eq 'E' -or 'EST') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: ES" Set-Variable -Name LKZ -Value 'ES' } ELSEIF ($LKZ -eq 'F') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: FR" Set-Variable -Name LKZ -Value 'FR' } ELSEIF ($LKZ -eq 'FIN') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: FI" Set-Variable -Name LKZ -Value 'FI' } ELSEIF ($LKZ -eq 'H') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: HU" Set-Variable -Name LKZ -Value 'HU' } ELSEIF ($LKZ -eq 'I') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: IT" Set-Variable -Name LKZ -Value 'IT' } ELSEIF ($LKZ -eq 'L') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: LU" Set-Variable -Name LKZ -Value 'LU' } ELSEIF ($LKZ -eq 'N') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: NO" Set-Variable -Name LKZ -Value 'NO' } ELSEIF ($LKZ -eq 'S') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: SE" Set-Variable -Name LKZ -Value 'SE' } ELSEIF ($LKZ -eq 'SLO') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: SI" Set-Variable -Name LKZ -Value 'SI' } ELSEIF ($LKZ -eq 'P') { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen: $LKZ wird geändert zu: PT" Set-Variable -Name LKZ -Value 'PT' } ELSE { Func-Write-LogDatei "Das ausgelesene Länderkennzeichen scheint korrekt zu sein und wird nicht geändert." } Return $LKZ } # Funktion um gewisse Sonderzeichen zu entfernen bzw. zu ersetzen. Function Func-Sonderzeichen-Ersetzen { Param ( [String]$Zeichenkette ) $Zeichenkette = ($Zeichenkette -Replace '&','und') Return $Zeichenkette } # Funktion um Daten aus einem Microsoft SQL Server in Form von Datasets auszulesen bzw. bereitzustellen. Function Func-DB-Ausgabe { Param ( [String]$SQLQuery ) Func-Write-LogDatei -LogEintrag "" Func-Write-LogDatei -LogEintrag "Führe folgende SQL Abfrage bzw. Ausgabe durch:" Func-Write-LogDatei -LogEintrag "$SQLQuery" $SQLServer = "vm-10-7\mssqlserver_1" $SQLDBName = "IID" $user = "digitaldata" $pwd = "ks7788b" $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server = $SQLServer; ;uid=$user; pwd=$pwd; Database = $SQLDBName; Integrated Security = False" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = $SqlQuery $SqlCmd.Connection = $SqlConnection $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand = $SqlCmd $DataSet = New-Object System.Data.DataSet $SqlConnection.Open() $SqlAdapter.Fill($DataSet) $SqlConnection.Close() Func-Write-LogDatei -LogEintrag "Die Abfrage hat $($DataSet.Tables[0].Rows.Count) Zeile(n) zurückgeliefert." #$DataSet.Tables[0].Rows | Out-GridView Return $DataSet } # Funktion um Daten in einen Microsoft SQL Server zu schreiben. Function Func-DB-Eingabe { Param ( [String]$SQLQuery ) Func-Write-LogDatei -LogEintrag "" Func-Write-LogDatei -LogEintrag "Führe folgende SQL Abfrage bzw. Eingabe durch:" Func-Write-LogDatei -LogEintrag "$SQLQuery" $SQLServer = "vm-10-7\mssqlserver_1" $SQLDBName = "IID" $user = "digitaldata" $pwd = "ks7788b" $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server = $SQLServer; ;uid=$user; pwd=$pwd; Database = $SQLDBName; Integrated Security = False" $SqlConnection.Open() $SqlCmd = $SqlConnection.CreateCommand() $SqlCmd.CommandText ="$SQLQuery" $SqlCmd.ExecuteNonQuery() $SqlConnection.Close() } #----------------------------------------------------------------------------------------------------- ####################################### Hauptprogramm starten. ####################################### #----------------------------------------------------------------------------------------------------- Clear-Host Write-Host "" Func-Write-LogDatei -LogEintrag "*******************************************************************************************" Func-Write-LogDatei -LogEintrag "Programmstart von $Skriptname auf $env:computername unter dem Konto: $env:USERDOMAIN\$env:USERNAME." Func-Write-LogDatei -LogEintrag "*******************************************************************************************" # Dataset für für nicht verarbeitete Touren bzw. Tourdaten. $DataSet = Func-DB-Ausgabe -SQLQuery "SELECT TOURNR, TOURDATUM FROM VWWEB_TOURDATEN WHERE TOURNR NOT IN (SELECT TOURNR FROM TBDD_TOUREN_EXPORT) GROUP BY TOURNR, TOURDATUM ORDER BY TOURNR" #$DataSet = Func-DB-Ausgabe -SQLQuery "SELECT TOURNR, TOURDATUM FROM VWWEB_TOURDATEN WHERE TOURNR = 8039379 or TOURNR = 8000899 OR TOURNR = 8005910 GROUP BY TOURNR, TOURDATUM ORDER BY TOURNR" IF ($($DataSet.Tables[0].Rows.Count) -gt 0) { $encoding = [System.Text.Encoding]::UTF8 # .NET XML Parser wird herangezogen $XmlWriter = New-Object System.XMl.XmlTextWriter($OutputDatei,$encoding) # XML Format Einstellungen $xmlWriter.Formatting = 'Indented' $xmlWriter.Indentation = 1 $XmlWriter.IndentChar = "`t" # Schreibe XML Kopf / Beginn $xmlWriter.WriteStartDocument() # Schreibe allegemeine Daten $xmlWriter.WriteStartElement('tours') $xmlWriter.WriteElementString('format','v1') $xmlWriter.WriteElementString('export_date',$(get-date -format yyyy-MM-ddTHH:mm)) FOREACH ($row in $DataSet.Tables[0].Rows) { Func-Write-LogDatei -LogEintrag "" Func-Write-LogDatei -LogEintrag "Starte Schleife für Touren:" Func-Write-LogDatei -LogEintrag "-----------------------------------------------" # Öffne Knoten: "tour" $xmlWriter.WriteStartElement('tour') Func-Write-LogDatei -LogEintrag "Das ausgelesene TourDatum lautet: $($Row[1])" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." Set-Variable -Name tour_date -Value $($Row[1]) # Konvertiere ausgelesenes Datum $tour_date = [DateTime]::ParseExact($tour_date,'MM\/dd\/yyyy HH:mm:ss',$NULL) $tour_date_year = ($tour_date.Year.ToString().Trim()) $tour_date_month = ($tour_date.Month.ToString().Trim()) $tour_date_day = ($tour_date.Day.ToString().Trim()) $tour_date_hour = ($tour_date.Hour.ToString().Trim()) $tour_date_minute = {00} -f ($tour_date.Minute.ToString().Trim()) $tour_date_Second = {00} -f ($tour_date.Second.ToString().Trim()) $xmlWriter.WriteElementString('tour_date',"${tour_date_year}-${tour_date_month}-${tour_date_day}T${tour_date_minute}:${tour_date_second}") # Schreibe TourNr Set-Variable -Name tour_no -Value $($Row[0]) Func-Write-LogDatei -LogEintrag "Die ausgelesene TourNr lautet: $tour_no" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('tour_no',$tour_no) # Öffne Knoten: "driver" $xmlWriter.WriteStartElement('driver') # Erstelle Dataset für den Fahrer der Tour $Dataset = Func-DB-Ausgabe -SQLQuery "SELECT DISTINCT TOURLKW FROM VWWEB_TOURDATEN WHERE TOURNR = $tour_no" Set-Variable -Name driverID -Value $($Dataset.Tables[0].Rows[0][0]) Func-Write-LogDatei -LogEintrag "Der ausgelesene Fahrer für die TourNr: $tour_no lautet: $driverID" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('driverID',$driverID) # Lösche Dataset für den Fahrer der Tour $Dateset.clear # Schließe Knoten: "driver" $xmlWriter.WriteEndElement() # Öffne Knoten: "deliveries" $xmlWriter.WriteStartElement('deliveries') $Dataset = Func-DB-Ausgabe -SQLQuery "SELECT [AufNr],[REFERENZNR2],[REFERENZNR3],[Info],[EmpNr],[EmpLKZ],[EmpPLZ],[EmpOrt],[EmpOrtsteil],[EmpStrasse],[EmpName1],[EmpName2],[EmpTel] FROM VWWEB_TOURDATEN WHERE TourNr = $tour_no GROUP BY [AufNr],[REFERENZNR2],[REFERENZNR3],[Info],[EmpNr],[EmpLKZ],[EmpPLZ],[EmpOrt],[EmpOrtsteil],[EmpStrasse],[EmpName1],[EmpName2],[EmpTel]" #$DataSet.Tables[0] | Out-GridView FOREACH ($Row in $DataSet.Tables[0].Rows) { Func-Write-LogDatei -LogEintrag "" Func-Write-LogDatei -LogEintrag "Starte Schleife für Sendungen:" Func-Write-LogDatei -LogEintrag "-----------------------------------------------" # Öffne Knoten: "delivery" $xmlWriter.WriteStartElement('delivery') Set-Variable -Name order_no -Value $($Row["AufNr"]) Func-Write-LogDatei -LogEintrag "Die ausgelesene Sendungs-Nummer lautet: $order_no" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('order_no',$order_no) Set-Variable -Name remark -Value $($Row["Info"]) Func-Write-LogDatei -LogEintrag "Die ausgelesene Bestell-Anmerkung lautet: $remark" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('remark',$remark) # Öffne Knoten: "delivery_note" $xmlWriter.WriteStartElement('delivery_note') Set-Variable -Name delivery_noteID1 -Value $($Row["REFERENZNR2"]) Set-Variable -Name delivery_noteID2 -Value $($Row["REFERENZNR3"]) IF ($delivery_noteID1 -eq "True" -and $delivery_noteID2 -eq "True") { Func-Write-LogDatei "delivery_noteID wird den DB Spalten REFERENZNR2 und REFERENZNR3 zusammengebaut." Set-Variable -Name delivery_noteID -Value "$delivery_noteID1 | $delivery_noteID2" } ELSEIF ($delivery_noteID1 -eq "True") { Func-Write-LogDatei "delivery_noteID wird der DB Spalten REFERENZNR2 geholt." Set-Variable -Name delivery_noteID -Value "$delivery_noteID1" } ELSEIF ($delivery_noteID2 -eq "True") { Func-Write-LogDatei "delivery_noteID wird den DB Spalten REFERENZNR3 geholt." Set-Variable -Name delivery_noteID -Value "$delivery_noteID2" } ELSE { Func-Write-LogDatei "delivery_noteID kann nicht gefüllt werden, da beide DB-Spalten (REFERENZNR2 und REFERENZNR3) leer sind." Set-Variable -Name delivery_noteID -Value "$NULL" } Func-Write-LogDatei -LogEintrag "Die ausgelesene Kunden-Bestellnummer lautet: $delivery_noteID" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('delivery_noteID',$delivery_noteID) # Schließe Knoten "delivery_note" $xmlWriter.WriteEndElement() # Öffne Knoten: "recipient" $xmlWriter.WriteStartElement('recipient') Set-Variable -Name customerID -Value $($Row["EmpNr"]) Func-Write-LogDatei -LogEintrag "Die ausgelesene Kunden-Nummer lautet: $customerID" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('customerID',$customerID) # Öffne Knoten: "delivery_address" $xmlWriter.WriteStartElement('delivery_address') Set-Variable -Name country_iso -Value (Func-LKZ-prüfen -LKZ $($Row["EmpLKZ"])) Func-Write-LogDatei -LogEintrag "Das ausgelesene Länderkennzeichen lautet: $country_iso" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('country_iso',$country_iso) Set-Variable -Name zip -Value $($Row["EmpPLZ"]) Func-Write-LogDatei -LogEintrag "Die ausgelesene Postleitzahl lautet: $zip" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('zip',$zip) Set-Variable -Name location -Value $($Row["EmpOrt"]) Func-Write-LogDatei -LogEintrag "Der ausgelesene Abladeort lautet: $location" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('location',$location) Set-Variable -Name location_extra -Value $($Row["EmpOrtsteil"]) Func-Write-LogDatei -LogEintrag "Der ausgelesene Abladeort (Zusatz) lautet: $location_extra" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('location_extra',$location_extra) Set-Variable -Name street -Value $($Row["EmpStrasse"]) Func-Write-LogDatei -LogEintrag "Die ausgelesene Straße lautet: $street" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('street',$street) # Schließe Knoten "delivery_address" $xmlWriter.WriteEndElement() # Öffne Knoten: "company" $xmlWriter.WriteStartElement('company') Set-Variable -Name name -Value (Func-Sonderzeichen-Ersetzen -Zeichenkette $($Row["EmpName1"])) Func-Write-LogDatei -LogEintrag "Der ausgelesene Kunden-Name lautet: $name" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('name',$name) Set-Variable -Name subsidiary -Value (Func-Sonderzeichen-Ersetzen -Zeichenkette $($Row["EmpName2"])) Func-Write-LogDatei -LogEintrag "Der ausgelesene Kunden-Name (Zusatz) lautet: $subsidiary" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('subsidiary',$subsidiary) Set-Variable -Name landline -Value $($Row["EmpTel"]) Func-Write-LogDatei -LogEintrag "Die ausgelesene Telefon-Nummer lautet: $landline" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('landline',$landline) # Schließe Knoten "company" $xmlWriter.WriteEndElement() # Schließe Knoten "recipient" $xmlWriter.WriteEndElement() # Öffne Knoten: "delivery_positions" $xmlWriter.WriteStartElement('delivery_positions') $Dataset = Func-DB-Ausgabe -SQLQuery "SELECT [AUFPOSNR],[FFNAME1],[INHALT],[INHALT2],[TATSGEW],[PAL],[PALANZ],[SOLLMEANZ] FROM [IID].[DBO].[VWWEB_TOURDATEN] WHERE AUFNR = $order_no GROUP BY [AUFPOSNR],[FFNAME1],[INHALT],[INHALT2],[TATSGEW],[PAL],[PALANZ],[SOLLMEANZ]" #$DataSet.Tables[0] | Out-GridView FOREACH ($Row in $DataSet.Tables[0].Rows) { Func-Write-LogDatei -LogEintrag "" Func-Write-LogDatei -LogEintrag "Starte Schleife für Sendungspostitionen:" Func-Write-LogDatei -LogEintrag "-----------------------------------------------" # Öffne Knoten: "delivery_position" $xmlWriter.WriteStartElement('delivery_position') Set-Variable -Name original_sender -Value (Func-Sonderzeichen-Ersetzen -Zeichenkette $($Row["FFName1"])) Func-Write-LogDatei -LogEintrag "Die ausgelesene Frachtführer lautet: $original_sender" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('original_sender',"$original_sender") Set-Variable -Name product_name -Value $($Row["Inhalt"]) Func-Write-LogDatei -LogEintrag "Die ausgelesene Position lautet: $product_name" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('product_name',$product_name) Set-Variable -Name actual_weight -Value $($Row["TatsGew"]) Func-Write-LogDatei -LogEintrag "Das ausgelesene Gewicht beträgt: $actual_weight" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('actual_weight', $actual_weight) # Öffne Knoten: "quantity_to_deliver" $xmlWriter.WriteStartElement('quantity_to_deliver') Set-Variable -Name quantity_to_deliver_unit -Value $($Row["SollMEAnz"]) Func-Write-LogDatei -LogEintrag "Die ausgelesenen Liter betragen: $quantity_to_deliver_unit" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('quantity_to_deliver_unit', $quantity_to_deliver_unit) # Schließe Knoten "quantity_to_deliver" $xmlWriter.WriteEndElement() # Öffne Knoten: "mhes" $xmlWriter.WriteStartElement('mhes') Set-Variable -Name amount -Value $($Row["PALANZ"]) Func-Write-LogDatei -LogEintrag "Das ausgelesene Menge des LHM lautet: $amount" #Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." For ($Zähler=0; $Zähler -lt $amount; $Zähler++) { # Öffne Knoten: "mhe" $xmlWriter.WriteStartElement('mhe') Set-Variable -Name type -Value $($Row["PAL"]) Func-Write-LogDatei -LogEintrag "Das ausgelesene LHM lautet: $type" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('type', $type) Set-Variable -Name id -Value $($Row["INHALT2"]) Func-Write-LogDatei -LogEintrag "Die ausgelesene ID des LHMs lautet: $id" Func-Write-LogDatei -LogEintrag "Der ausgelesene Wert wird in XML Konten/Element: geschrieben." $xmlWriter.WriteElementString('id', $id) # Schließe Knoten "mhe" $xmlWriter.WriteEndElement() } $Zähler = $NULL # Schließe Knoten "mhes" $xmlWriter.WriteEndElement() # Schließe Knoten "delivery_position" $xmlWriter.WriteEndElement() Func-Write-LogDatei -LogEintrag "-----------------------------------------------" Func-Write-LogDatei -LogEintrag "Beende Schleife für Sendungspostitionen." } $Dateset.clear # Schließe Knoten "delivery_positions" $xmlWriter.WriteEndElement() # Schließe Knoten "delivery" $xmlWriter.WriteEndElement() Func-Write-LogDatei -LogEintrag "-----------------------------------------------" Func-Write-LogDatei -LogEintrag "Beende Schleife für Sendungen." } $Dateset.clear # Schließe Knoten "deliveries" $xmlWriter.WriteEndElement() # Schließe Knoten "tour" $xmlWriter.WriteEndElement() # Setze Status auf "übermittelt" Func-DB-Eingabe -SQLQuery "INSERT INTO TBDD_TOUREN_EXPORT (TOURNR, DATEINAME) VALUES ($tour_no, '$OutputDatei')" Func-Write-LogDatei -LogEintrag "-----------------------------------------------" Func-Write-LogDatei -LogEintrag "Beende Schleife für Touren." } # Schließe Knoten "tours" $xmlWriter.WriteEndElement() # XML Datei abschließen $xmlWriter.WriteEndDocument() $xmlWriter.Flush() $xmlWriter.Close() } ELSE { Func-Write-LogDatei "Keine abzuarbeitenden Touren gefunden!" } # Löschen alter Log-Dateien. Func-Write-LogDatei -LogEintrag "" Func-Write-LogDatei -LogEintrag "-------------------------------------------------------------------------------------------" Func-Write-LogDatei -LogEintrag "Prüfe ob zu löschende Log-Dateien vorhanden sind." Func-Write-LogDatei -LogEintrag "-------------------------------------------------------------------------------------------" IF ($LogEntfernen -gt 0) { Func-Write-LogDatei -LogEintrag "Aktuell sollen Log-Dateien gelöscht werden, die vor $LogEntfernen Tag(en) erstellt wurden." $Funde = (Func-Dateien-zusammensuchen -SuchPfad "$LogPfad\*" -SuchDateiEndung log | where {$_.Name -like "*$SkriptName*" -and $_.lastwritetime -lt $((Get-Date).AddDays(-$LogEntfernen)) -and -not $_.psiscontainer}) IF ($Funde -eq $null) { Func-Write-LogDatei -LogEintrag "Keine zu löschenden Log-Dateien vorhanden." } ELSE { Func-Write-LogDatei -LogEintrag "Dateien gefunden, folgende Log-Dateien werden aufgund ihres alters gelöscht:" FOREACH ($Fund in $Funde) { Func-Write-LogDatei -LogEintrag "Log-Datei: $Fund wird entfernt." Remove-Item -Path $Fund -Force -Verbose } } } ELSE { Func-Write-LogDatei -LogEintrag "Sie haben in der Konfigurationsdatei angegeben, das Log Dateien nicht automatisch gelöscht werden sollen!" } Func-Write-LogDatei -LogEintrag "" Func-Write-LogDatei -LogEintrag "*******************************************************************************************" Func-Write-LogDatei -LogEintrag "Programmende von $Skriptname auf $env:computername unter dem Konto: $env:USERDOMAIN\$env:USERNAME." Func-Write-LogDatei -LogEintrag "*******************************************************************************************" # Definierte Variablen wieder löschen, damit sie nicht im Arbeitsspeicher verbleiben. Remove-Variable -Name SkriptName -Force Remove-Variable -Name SkriptPfad -Force Remove-Variable -Name KonfigDatei -Force Remove-Variable -Name KonfigWerte -Force Remove-Variable -Name ZeitStempel1 -Force Remove-Variable -Name Fehler -Force Remove-Variable -Name LogDatei -Force Remove-Variable -Name LogEintrag -Force Remove-Variable -Name LogPfadListe -Force Remove-Variable -Name LogPfad -Force Remove-Variable -Name LogPfadEintrag -Force Remove-Variable -Name LogEntfernen -Force Remove-Variable -Name DateiTrennzeichen -Force Remove-Variable -Name OutputDatei -Force Remove-Variable -Name Dataset -Force $error.clear()