Powershell: String aus Text oder ps1 Output Extrahieren
Hallo,
folgende Text File bzw. den Output eines ps-Skript würde ich gerne auf die Value von returnResult reduzieren bzw returnResult als $result hinterlegen.
Das Skript:
Ein Ansatz war Substring($string.length - 2, 12), jedoch ist hier .length 12, was sich mir nicht erschließt.
Hat hier jemand eine Idee?
Gruß
OpSec
folgende Text File bzw. den Output eines ps-Skript würde ich gerne auf die Value von returnResult reduzieren bzw returnResult als $result hinterlegen.
Caption : Intel64 Family 6 Model 58 Stepping 9
DeviceID : CPU0
Manufacturer : GenuineIntel
MaxClockSpeed : 3401
Name : Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
SocketDesignation : CPU 1
{"returnCode":1,"returnReason":"Processor, ","logging":"Storage: OSDiskSize=224GB. PASS; Memory: System_Memory=8GB. PASS; TPM: TPMVersion=Undetermined. UNDETERMINED; Zum Ausführen dieses Befehls sind Administratorberechtigungen erforderlich.; Processor: {AddressWidth=64; MaxClockSpeed=3401; NumberOfLogicalCores=8; Manufacturer=GenuineIntel; Caption=Intel64 Family 6 Model 58 Stepping 9; }. FAIL; SecureBoot: Undetermined. UNDETERMINED; UnauthorizedAccessException Es konnten keine ordnungsgemäßen Berechtigungen festgelegt werden. Zugriff verweigert.; ","returnResult":"NOT CAPABLE"}
Das Skript:
$ip = Get-NetIPAddress -AddressFamily IPv4 -InterfaceIndex $(Get-NetConnectionProfile | Select-Object -ExpandProperty InterfaceIndex) | Select-Object -ExpandProperty IPAddress
$dirpath = "\\server\dir\"
$ultpath = "\\server\dir\output\output.txt"
Push-Location $dirpath
& \\server\dir\HardwareReadiness.ps1 | Out-String $result
$ip + $result >> \\server\dir\output\output.txt
Ein Ansatz war Substring($string.length - 2, 12), jedoch ist hier .length 12, was sich mir nicht erschließt.
Hat hier jemand eine Idee?
Gruß
OpSec
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3132395454
Url: https://administrator.de/contentid/3132395454
Ausgedruckt am: 08.11.2024 um 01:11 Uhr
2 Kommentare
Neuester Kommentar
Servus.
Zeile 9 ist JSON das brauchst du nicht als String parsen, das ist ehrlich gesagt anno 1980.
Also passe am besten gleich dein Powershell Skript welches diese Zeile ausliest so an das es den JSON-String in ein Object verwandelt (ConvertFrom-Json) dann kannst du ohne Regex oder Substring direkt und zuverlässig darauf zugreifen
Wenn du die JSON-Zeile aus einer vorhandenen LOG-Datei auswerten willst in der auch noch andere Sachen stehen wie von dir oben gezeigt, dann so
Rein über regex lässt sich das natürlich auch machen würde aber über den Weg über das JSON Object präferieren.
Grüße Uwe
Zeile 9 ist JSON das brauchst du nicht als String parsen, das ist ehrlich gesagt anno 1980.
Also passe am besten gleich dein Powershell Skript welches diese Zeile ausliest so an das es den JSON-String in ein Object verwandelt (ConvertFrom-Json) dann kannst du ohne Regex oder Substring direkt und zuverlässig darauf zugreifen
$jsonstring = '{"returnCode":1,"returnReason":"Processor, ","logging":"Storage: OSDiskSize=224GB. PASS; Memory: System_Memory=8GB. PASS; TPM: TPMVersion=Undetermined. UNDETERMINED; Zum Ausführen dieses Befehls sind Administratorberechtigungen erforderlich.; Processor: {AddressWidth=64; MaxClockSpeed=3401; NumberOfLogicalCores=8; Manufacturer=GenuineIntel; Caption=Intel64 Family 6 Model 58 Stepping 9; }. FAIL; SecureBoot: Undetermined. UNDETERMINED; UnauthorizedAccessException Es konnten keine ordnungsgemäßen Berechtigungen festgelegt werden. Zugriff verweigert.; ","returnResult":"NOT CAPABLE"}'
($jsonstring | ConvertFrom-JSON).returnResult
$logfile = 'D:\output.txt'
$returnResult = [regex]::match((gc $logfile -raw),'(?m)^\{.+}').Value | ConvertFrom-JSON | select -Expand returnResult
$returnResult
$logfile = 'D:\output.txt'
$returnResult = [regex]::match((gc $logfile -raw),'(?i)(?<="returnResult":")[^"]*').Value
$returnResult
Grüße Uwe