sombetzki
Goto Top

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
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

Content-ID: 6669525415

Url: https://administrator.de/contentid/6669525415

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

6247018886
Lösung 6247018886 06.04.2023 aktualisiert um 16:32:47 Uhr
Goto Top
$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
}
Cheers briggs
Sombetzki
Sombetzki 06.04.2023 um 16:40:03 Uhr
Goto Top
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
Crusher79
Crusher79 06.04.2023 aktualisiert um 16:40:29 Uhr
Goto Top
$shipping_file = "C:\temp\Neues Textdokument.txt"  
$xml = [xml](Get-Content $shipping_file)
$xml.OrderStatus.StatusInformation.TrackingNumber |
    Where-Object {$_ -like '0034*'}  
$xml.OrderStatus.StatusInformation.LogisticsCompanyID='DHL'  
$xml.Save($shipping_file)

Verdammt., @6247018886 war schneller
3063370895
Lösung 3063370895 06.04.2023 um 16:42:21 Uhr
Goto Top
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

$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
}
Crusher79
Crusher79 06.04.2023 um 16:42:50 Uhr
Goto Top
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

Ja mit ODER.

$xml.Orderstatus.StatusInformation.TrackingNumber -like '0034043*' -or $xml.Orderstatus.StatusInformation.TrackingNumber -like '5039*'  
michi1983
michi1983 06.04.2023 um 16:42:57 Uhr
Goto Top
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

das 2. If statement bekommst du nicht selber hin? Was soll denn passieren wenn die andere Nummer (Ausland) vorkommt?
6247018886
Lösung 6247018886 06.04.2023 aktualisiert um 16:54:16 Uhr
Goto Top
Zitat von @Sombetzki:

Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
Natürlich.
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 -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
}
Sombetzki
Sombetzki 11.04.2023 um 11:34:11 Uhr
Goto Top
vielen Dank für die schnelle Hilfe, leider ist etwas durcheinander geraten.

<?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>

bei dieser Datei soll in TrackingNumber nach 003404 oder 5039 gesucht werden und falls vorhanden im Feld
LogisticsCompanyID DHL eingetragen werden anschließend sollen alle überprüften *_SHIPPED.xml Dateien nach $ziel verschoben werden.
$quelle = 'W:\Ausgang\KundeA'
$ziel = 'W:\Ausgang\KundeA\bearbeitet'
6247018886
6247018886 11.04.2023 aktualisiert um 11:48:01 Uhr
Goto Top
Steht doch oben schon genau so in X Varianten ... 🧐.

p.s. "Dat Dingens da op de Hals hat übrijens ne Funktion minge Schöler."
Sombetzki
Sombetzki 11.04.2023 um 11:48:59 Uhr
Goto Top
Ja aber in den Lösungen steht immer was von tracking_url, die ja nicht in der Datei vorhanden ist.
6247018886
6247018886 11.04.2023 aktualisiert um 12:01:03 Uhr
Goto Top
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!

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
}
Sombetzki
Sombetzki 11.04.2023 um 12:17:45 Uhr
Goto Top
sorry klappt leider nicht
C:\scripte>PowerShell.exe -ExecutionPolicy Bypass -Command "& 'W:\OrderDown\Status\dhl.ps1'"  
In W:\OrderDown\Status\dhl.ps1:5 Zeichen:82
+ ... Orderstatus.StatusInformation.TrackingNumber -match '^(003404|5039)')  
+                                                                         ~
Anweisungsblock nach "if" (Bedingung) fehlt.  
In W:\OrderDown\Status\dhl.ps1:10 Zeichen:1
+ }
+ ~
Unerwartetes Token "}" in Ausdruck oder Anweisung.  
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingStatementBlock
6247018886
6247018886 11.04.2023 aktualisiert um 12:29:16 Uhr
Goto Top
Eine geschweifte Klammer zu viel entfernt ist korrigiert. Fehlermeldungen lesen hilft ...
Sombetzki
Sombetzki 11.04.2023 um 12:37:53 Uhr
Goto Top
@6247018886
super vielen Dank.