Parsing text into object
Published on: 5th Dec 2019
Updated on: 16th Jan 2022
Explanation
The result from a DOS command is text lines which do not have a "real" column. If you want to analyze the result, you must parse the text yourself.
For example, we want to find out the IP to physical addresses, we use the following command:
arp -a
The result looks like this:
Interface: 192.168.1.100 --- 0x5
Internet Address Physical Address Type
192.168.1.1 18-31-bf-53-7a-24 dynamic
192.168.1.255 ff-ff-ff-ff-ff-ff static
224.0.0.22 01-00-5e-00-00-16 static
224.0.0.251 01-00-5e-00-00-fb static
224.0.0.252 01-00-5e-00-00-fc static
239.255.255.250 01-00-5e-7f-ff-fa static
255.255.255.255 ff-ff-ff-ff-ff-ff static
To parse this result, we will run the following Powershell script:
class myObject {
[string]$ip
[string]$addr
[string]$type
}
$l = (arp -a)
$inPreamble = $true
switch -Regex ($l) {
# skip the header
{$inPreamble -and $_ -match 'Internet Address'} { $inPreamble = $false; continue }
# parse the item lines with pattern:
# - spaces
# - ip (non spaces)
# - addr (non spaces)
# - type (non spaces)
"^\s+(?<ip>\S+)\s+(?<addr>\S+)\s+(?<type>\S+)" {
[myObject] @{
ip = $matches.ip
addr = $matches.addr
type = $matches.type
}
continue
}
}
Reference
https://devblogs.microsoft.com/powershell/parsing-text-with-powershell-2-3/
Jump to #POWERSHELL blog
Author
Lau Hon Wan, software developer.