PowerShell Script wenn dann Hilfe
Hallo,
könnte mir jemand bitte beim umschreiben eines vorhandenen Scripts helfen.
Momentan ist folgendes Script bei mir aktiv:
Datei die umgeschrieben wird (Name der Datei: 51258979_SHIPPED) wobei die Zahl sich bei jeder Datei verändert.
Inhalt von 51258979_SHIPPED
Aktuelles Script
Jetzt habe ich jedoch bei einem Kunden eine .xml Datei (Name der Datei: 3675moo_20230316081848_SHIPPED.xml) wobei die Zahl sich bei jeder Datei sich verändert.
Inhalt von 3675moo_20230316081848_SHIPPED.xml
und bekomme das Script nicht angepasst dass in der xml bei trackingNumber 0034043* das Feld LogisticsCompanyID ind DHL geändert wird.
VG
Sombetzki
könnte mir jemand bitte beim umschreiben eines vorhandenen Scripts helfen.
Momentan ist folgendes Script bei mir aktiv:
Datei die umgeschrieben wird (Name der Datei: 51258979_SHIPPED) wobei die Zahl sich bei jeder Datei verändert.
Inhalt von 51258979_SHIPPED
tracking_id=00340434312800101703
tracking_url=http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=00340434312800101703&rfn=&extendedSearch=true
shipping_provider=Paketdienst GLS
Aktuelles Script
$quelle = 'W:\Ausgang\KundeA'
$ziel = 'W:\Ausgang\KundeA\bearbeitet'
Get-ChildItem $quelle -File -Filter "*_SHIPPED" | %{
$content = Get-Content $_.FullName -raw
$id = [regex]::Match($content,'(?i)(?<=tracking_id=)003404\d+').Value
if ($id -ne ''){
$content -replace '(?<=tracking_url=).*',"https://gls-group.eu/DE/de/paketverfolgung?match=$id" -replace '(?<=shipping_provider=).*',"Paketdienst DHL" | set-content $_.FullName
}
$_ | move-item -Destination $ziel -Force
}
Jetzt habe ich jedoch bei einem Kunden eine .xml Datei (Name der Datei: 3675moo_20230316081848_SHIPPED.xml) wobei die Zahl sich bei jeder Datei sich verändert.
Inhalt von 3675moo_20230316081848_SHIPPED.xml
<?xml version='1.0' encoding='utf-8'?>
<OrderStatus>
<OrderData>
<Version>1.0.0</Version>
<OrderDate>20230316081848</OrderDate>
<OrderID>3675moo</OrderID>
<OrderLanguage>DE</OrderLanguage>
<ProductIDs>
<ProductID>302020030</ProductID>
<ProductID>POSTERPAUSCHALE</ProductID>
</ProductIDs>
</OrderData>
<StatusInformation>
<Status>SHIPPED</Status>
<TrackingNumber>00340434312800100713</TrackingNumber>
<PackageWeight>1000</PackageWeight>
<LogisticsCompanyID>GLS</LogisticsCompanyID>
</StatusInformation>
</OrderStatus>
und bekomme das Script nicht angepasst dass in der xml bei trackingNumber 0034043* das Feld LogisticsCompanyID ind DHL geändert wird.
VG
Sombetzki
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6669525415
Url: https://administrator.de/contentid/6669525415
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
14 Kommentare
Neuester Kommentar
$quelle = 'W:\Ausgang\KundeA'
$ziel = 'W:\Ausgang\KundeA\bearbeitet'
Get-ChildItem $quelle -File -Filter "*_SHIPPED" | %{
if ($_.Extension -eq '.xml'){
[xml]$xml = Get-Content $_.FullName
if ($xml.Orderstatus.StatusInformation.TrackingNumber -like '003404*'){
$xml.Orderstatus.StatusInformation.LogisticsCompanyID = 'DHL'
$xml.Save($_.Fullname)
}
}else{
$content = Get-Content $_.FullName -raw
$id = [regex]::Match($content,'(?i)(?<=tracking_id=)003404\d+').Value
if ($id -ne ''){
$content -replace '(?<=tracking_url=).*',"https://gls-group.eu/DE/de/paketverfolgung?match=$id" -replace '(?<=shipping_provider=).*',"Paketdienst DHL" | set-content $_.FullName
}
}
$_ | move-item -Destination $ziel -Force
}
Zitat von @Sombetzki:
Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL
Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL
$quelle = 'W:\Ausgang\KundeA'
$ziel = 'W:\Ausgang\KundeA\bearbeitet'
Get-ChildItem $quelle -File -Filter "*_SHIPPED" | %{
if ($_.Extension -eq '.xml'){
[xml]$xml = Get-Content $_.FullName
if ($xml.Orderstatus.StatusInformation.TrackingNumber -like '0034043*' -or $xml.Orderstatus.StatusInformation.TrackingNumber -like '5039*')
$xml.Orderstatus.StatusInformation.LogisticsCompanyID = 'DHL'
$xml.Save($_.Fullname)
}
}else{
$content = Get-Content $_.FullName -raw
$id = [regex]::Match($content,'(?i)(?<=tracking_id=)003404\d+|5039\d+').Value
if ($id -ne ''){
$content -replace '(?<=tracking_url=).*',"https://gls-group.eu/DE/de/paketverfolgung?match=$id" -replace '(?<=shipping_provider=).*',"Paketdienst DHL" | set-content $_.FullName
}
}
$_ | move-item -Destination $ziel -Force
}
Zitat von @Sombetzki:
Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL
Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL
Ja mit ODER.
$xml.Orderstatus.StatusInformation.TrackingNumber -like '0034043*' -or $xml.Orderstatus.StatusInformation.TrackingNumber -like '5039*'
Zitat von @Sombetzki:
Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL
Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL
das 2. If statement bekommst du nicht selber hin? Was soll denn passieren wenn die andere Nummer (Ausland) vorkommt?
Zitat von @Sombetzki:
Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
Natürlich.Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL
also wenn 003404 oder 5039 =DHL
$quelle = 'W:\Ausgang\KundeA'
$ziel = 'W:\Ausgang\KundeA\bearbeitet'
Get-ChildItem $quelle -File -Filter "*_SHIPPED" | %{
if ($_.Extension -eq '.xml'){
[xml]$xml = Get-Content $_.FullName
if ($xml.Orderstatus.StatusInformation.TrackingNumber -match '^(003404|5039)'){
$xml.Orderstatus.StatusInformation.LogisticsCompanyID = 'DHL'
$xml.Save($_.Fullname)
}
}else{
$content = Get-Content $_.FullName -raw
$id = [regex]::Match($content,'(?i)(?<=tracking_id=)003404\d+').Value
if ($id -ne ''){
$content -replace '(?<=tracking_url=).*',"https://gls-group.eu/DE/de/paketverfolgung?match=$id" -replace '(?<=shipping_provider=).*',"Paketdienst DHL" | set-content $_.FullName
}
}
$_ | move-item -Destination $ziel -Force
}
Steht doch oben schon genau so in X Varianten ... 🧐.
p.s. "Dat Dingens da op de Hals hat übrijens ne Funktion minge Schöler."
p.s. "Dat Dingens da op de Hals hat übrijens ne Funktion minge Schöler."
Zitat von @Sombetzki:
Ja aber in den Lösungen steht immer was von tracking_url, die ja nicht in der Datei vorhanden ist.
Das war nur für den Fall das beide Varianten von Dateien im Verzeichnis liegen, das hattest du nämlich nicht spezifiziert! In der IF Abfrage wird ja unterschieden, ist es eine XML oder nicht und je nachdem wird die entsprechende Bearbeitungs-Variante angewendet!Ja aber in den Lösungen steht immer was von tracking_url, die ja nicht in der Datei vorhanden ist.
Wenn das eh alles die selben XMLs sind dann kannst du die IF-Abfrage natürlich entfernen!! Code lesen und verstehen und nicht nur Blind kopieren ist die erste Devise!
$quelle = 'W:\Ausgang\KundeA'
$ziel = 'W:\Ausgang\KundeA\bearbeitet'
Get-ChildItem $quelle -File -Filter "*_SHIPPED.xml" | %{
[xml]$xml = Get-Content $_.FullName
if ($xml.Orderstatus.StatusInformation.TrackingNumber -match '^(003404|5039)'){
$xml.Orderstatus.StatusInformation.LogisticsCompanyID = 'DHL'
$xml.Save($_.Fullname)
}
$_ | move-item -Destination $ziel -Force
}
Eine geschweifte Klammer zu viel entfernt ist korrigiert. Fehlermeldungen lesen hilft ...