2017-09-27 95 views
1

我正在解析來自Web服務器(特別是Fanuc控制器)的HTML並將innerText指定給對象。解析和修改PowerShell對象

#Make sure the controller respons 
if ($webBody.StatusCode -eq 200) { 
    Write-Host "Response is Good!" -ForegroundColor DarkGreen 
    $preBody = $webBody.ParsedHtml.body.getElementsByTagName('PRE') | Select -ExpandProperty innerText 
    $preBody 
} 

輸出看起來像一個小這樣:

[1-184 above] 
    [185] = 0 '' 
    [186] = 0 '' 
    [187] = 0 '' 
    [188] = 0 '' 
    [189] = 0 '' 
    [and so on] 

我只希望從190,191,193例如讀取數據。 這樣做的最好方法是什麼?我正在努力消除對象中不需要的數據。

目前我有一個輸出到txt文件的vbscript應用程序,清理數據然後讀取它並將其操作到sql插入。我試圖用powershell改進它,並且儘可能地嘗試在程序中保留所有內容。

任何幫助非常感謝。

回答

2

假設數據集不是太大而無法將所有內容放入內存中。你可以用正則表達式解析成PowerShell對象,然後你可以使用Where-Object進行過濾。

#Regex with a capture group for each important value 
$RegEx = "\[(.*)\]\s=\s(\d+)\s+'(.*)'" 
$IndexesToMatch = @(190, 191, 193) 
$ParsedValues = $prebody.trim | ForEach-Object { 
    [PSCustomObject]@{ 
     index = $_ -replace $regex,'$1' 
     int = $_ -replace $regex,'$2' 
     string = $_ -replace $regex,'$3' 
    } 
} 
$ParsedValues | Where-Object { $_.index -in $IndexesToMatch } 

輸入:

[190] = 1 'a' 
[191] = 2 'b' 
[192] = 3 'c' 
[193] = 4 'd' 
[194] = 5 'e' 

輸出:

index int string 
----- --- ------ 
190 1 a 
191 2 b 
193 4 d 
+0

感謝表示本,我從來沒有想到使用替換前withing的自定義對象的。去書籤這個以供將來參考。 – Snak3d0c