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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5921867941
Url: https://administrator.de/contentid/5921867941
Ausgedruckt am: 18.11.2024 um 09:11 Uhr
10 Kommentare
Neuester Kommentar
select-string -Path "pfad.xml" -Pattern "Wortsuche ([^<]+)" | %{$_.matches.groups[1].value}
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>
$xml = [xml](Get-Content pfad.xml)
$xml.SelectSingleNode('//Datei').innerText.split(' ')[-1]
Wurstel
Hallo,
Gruß,
Peter
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.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 Gruß,
Peter
Hallo,
Gruß,
Peter
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.In der XML ist Firmen Daten daher möchte ich das lieber hier nicht veröffentlichen.
Gruß,
Peter
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}
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
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/
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
Mehr kannst du selbst nachlesen
https://adamtheautomator.com/powershell-parse-xml/