dennisweber
Goto Top

Ausgabe der Textline verkleinern (Powershell)

Hallo zusammen,

ich bin dabei ein kleines Powershell Skript zusammenzubauen, dass in der angegebenen XML Datei nach einem gewissen Wort hier "Wortsuche" sucht und mit die Textzeile anzeigt, mir fehlt allerdings noch eine Sache.

$a = get-childitem "pfad.xml" | select-string "Wortsuche"

Als Ausgabe bzw. in der Variable $a erhalte ich:

pfad.xml:123: <Datei>Wortsuche 1.2.3.4</Datei>


Ich will jetzt diesen String soweit verkürzen das ich nur die Nummer 1.2.3.4 bekommen.
Welche CMDlet eignen sich dafür?
Kann man irgendwie die Zeile genau nennen damit der Text/Ausgabe verkürzt wird?
Oder nach bestimmten Worten aus der Zeile filtern?

Hindergrund ist, dass ich in einer Variable immer diese Nummer einpflegen möchte wenn ich das Skript ausführe.
Die Nummer ist nicht statisch und ist bei jeder neuen Datei wieder anders.

Content-Key: 5921867941

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

Printed on: April 28, 2024 at 18:04 o'clock

Mitglied: 5175293307
Solution 5175293307 Feb 09, 2023 updated at 13:21:41 (UTC)
Goto Top
select-string -Path "pfad.xml"  -Pattern "Wortsuche ([^<]+)" | %{$_.matches.groups[1].value}  
Running Demo

Btw. Das ist offensichtlich ne XML-Datei die kann PowerShell direkt als Object parsen, würde ich also immer vor dem String-Geparse bevorzugen.
Bsp. ohne die XML jetzt vorliegen zu haben.
bsp XML
<?xml version="1.0" encoding="utf-8"?> 
<root>
    <Datei>Wortsuche 1.2.3.4</Datei>
</root>
PS Code zum holen des Wertes aus dem "Datei" Knoten
$xml = [xml](Get-Content pfad.xml)
$xml.SelectSingleNode('//Datei').innerText.split(' ')[-1]  
Running Demo

Wurstel
Member: DennisWeber
DennisWeber Feb 09, 2023 at 14:05:50 (UTC)
Goto Top
Danke für die schnelle Rückmeldung Wurstel.

Dein erstens Skript hat funktioniert allergings hatte ich noch vergessen mitzuschreiben, dass in string noch ein paar Zeichen dazu hat, sorry!

<Datei>Wortsuche 1.2.3.4.xlss</Datei>

Wie kriege ich nun das .xlsx auch raus?


Dein zweites Skript funktioniert nicht weil die XML mehr Zeilen lang ist und der Abschnitt Datei mehrfach vorkommt.

Danke schonmal im voraus!
Member: Pjordorf
Pjordorf Feb 09, 2023 at 14:43:40 (UTC)
Goto Top
Hallo,

Zitat von @DennisWeber:
Sorry, aber du machst es dir zu leicht. Läasst alle hier im unklaren wie deine Quelldaten aussehen, was du genau suchst, aber jetzt hat einer dir geholfen und der ist auch noch schuld das er falsche Gedankengänge hat. So ist das eben wenn du nur Gedankenlesen zulässt.face-smile

Dein zweites Skript funktioniert nicht weil die XML mehr Zeilen lang ist und der Abschnitt Datei mehrfach vorkommt.
Aber auf den Gedanken gekommen deine XML hier zur Verfügung zu stellen bist du face-sad

Gruß,
Peter
Member: DennisWeber
DennisWeber Feb 09, 2023 at 14:52:39 (UTC)
Goto Top
In der XML ist Firmen Daten daher möchte ich das lieber hier nicht veröffentlichen.
Member: Pjordorf
Pjordorf Feb 09, 2023 at 15:00:46 (UTC)
Goto Top
Hallo,

Zitat von @DennisWeber:
In der XML ist Firmen Daten daher möchte ich das lieber hier nicht veröffentlichen.
Die können doch unleserlich/unkenntlich gemacht werden. Aber es ist einfacher sich zu beschweren das jemand von anderen Daten ausgeht als du. Sorry.

Gruß,
Peter
Mitglied: 5175293307
Solution 5175293307 Feb 09, 2023 at 15:06:12 (UTC)
Goto Top
Dein zweites Skript funktioniert nicht weil die XML mehr Zeilen lang ist und der Abschnitt Datei mehrfach vorkommt.
Nee daran liegt es nicht, eher am Namespace ...

Wie kriege ich nun das .xlsx auch raus?
select-string -Path "pfad.xml" -Pattern "Wortsuche (.*?).xlsx" | %{$_.matches.groups[1].value}  
Member: DennisWeber
DennisWeber Feb 09, 2023 at 15:23:04 (UTC)
Goto Top
Hä!?! wer hat sich beschwert und was verstehst du unter beschweren überhaupt?

Ich hebe nochmal ein paar Textpassagen aus meinem letzten Beitrag.

Danke für die schnelle Rückmeldung Wurstel.

...noch ein paar Zeichen dazu hat, sorry!

Danke schonmal im voraus!
Member: DennisWeber
DennisWeber Feb 09, 2023 at 15:27:23 (UTC)
Goto Top
Zitat von @5175293307:

Dein zweites Skript funktioniert nicht weil die XML mehr Zeilen lang ist und der Abschnitt Datei mehrfach vorkommt.
Nee daran liegt es nicht, eher am Namespace ...

Wie kriege ich nun das .xlsx auch raus?
select-string -Path "pfad.xml" -Pattern "Wortsuche (.*?).xlsx" | %{$_.matches.groups[1].value}  

Genial, das hat funktioniert danke!

Was meinst du mit Namespace, was hätte man da noch anpassen müssen?
Member: Pjordorf
Pjordorf Feb 09, 2023 at 15:30:07 (UTC)
Goto Top
Hallo,

Zitat von @DennisWeber:
Was meinst du mit Namespace, was hätte man da noch anpassen müssen?
https://de.wikipedia.org/wiki/Namensraum

Gruß,
Peter
Mitglied: 5175293307
5175293307 Feb 09, 2023 updated at 16:46:49 (UTC)
Goto Top
Zitat von @DennisWeber:
Was meinst du mit Namespace, was hätte man da noch anpassen müssen?
https://www.w3schools.com/xml/xml_namespaces.asp

Ohne die XML vorliegen zu haben kann ich nicht helfen (SelectSingleNode arbeitet mit XPath und das berücksichtigt Namespaces), denn dann kann man es auch ohne Namespace zu berücksichtigen machen. Wenn man den Tree-Path direkt vom Root aus angibt.
Im oberen Beispiel wäre der Tree-Path bspw. so
$xml = [xml](Get-Content pfad.xml)
$xml.root.datei
Also die Knotennamen vom Root aus bis zum Zielknoten angeben, so kommt man zum Knoten den man haben will.
Mehr kannst du selbst nachlesen
https://adamtheautomator.com/powershell-parse-xml/