8
0
Skriptentwickung/archive/Export-WinSpedTouren/Export-WinSpedTouren.ps1
2024-01-24 16:42:38 +01:00

729 lines
41 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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: <tour_date> 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: <tour_no> 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: <driverID> 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: <order_no> 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: <remark> 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: <delivery_noteID> 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: <customerID> 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: <country_iso> 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: <zip> 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: <location> 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: <location_extra> 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: <street> 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: <name> 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: <subsidiary> 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: <landline> 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: <original_sender> 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: <product_name> 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: <actual_weight> 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: <quantity_to_deliver_unit> 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: <amount> 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: <type> 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: <id> 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()