TextUtility module gets new functionality
We have recently released another preview of the TextUtility module. This module is a collection of tools that
are meant to help with working with text content.
Installing the module
You can install this module from the PowerShellGallery with PowerShellGet via:
Install-Module -Name Microsoft.PowerShell.TextUtility -AllowPrerelease
Or you can install it with PSResourceGet via:
Install-PSResource -Name Microsoft.PowerShell.TextUtility -Prerelease
ConvertFrom-TextTable
The most recent pre-release of Microsoft.PowerShell.TextUtility
has some new exciting functionality.
The new ConvertFrom-TextTable
cmdlet allows you to take tabular text
and convert it into objects.
Also, there is a way to convert some of types of those objects into something other than a string.
Using the -ConvertPropertyValue
parameter will change the value of the property to a strongly typed value.
This means you can do the following:
PS> df | select -first 6 | convertfrom-texttable -ConvertPropertyValue |Ft
Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted_on
---------- ---------- ---- --------- -------- ----- ----- ------ ----------
/dev/disk4s1s1 3907805752 17699080 1242895000 2% 355382 4291123926 0% /
devfs 462 462 0 100% 800 0 100% /dev
/dev/disk4s3 3907805752 3676600 1242895000 1% 3745 6214475000 0% /System/Volumes/Preboot
/dev/disk4s5 3907805752 4194376 1242895000 1% 2 6214475000 0% /System/Volumes/VM
/dev/disk4s6 3907805752 19992 1242895000 1% 19 6214475000 0% /System/Volumes/Update
PS> df | select -first 6 | convertfrom-texttable -ConvertPropertyValue |?{$_.available -lt 10}|Ft
Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted_on
---------- ---------- ---- --------- -------- ----- ----- ------ ----------
devfs 462 462 0 100% 800 0 100% /dev
ConvertFrom-TextTable
also allows you to specify where the header line is defined, or skip lines until you get to where the data starts.
Additionally, it is possible to take the text output and explicitly create properties by defining where a column starts.
PS> $string = $("a".."z";"A".."Z";0..9) -join ""
PS> 1..10 | %{$string}|convertfrom-texttable -noheader -columnoffset 0,15,23,40,55 | ft
Property_01 Property_02 Property_03 Property_04 Property_05
----------- ----------- ----------- ----------- -----------
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
abcdefghijklmno pqrstuvw xyzABCDEFGHIJKLMN OPQRSTUVWXYZ012 3456789
Finally, you can also emit the data as JSON with the -AsJson
parameter:
PS> who -p | %{$_.trim()} | convertfrom-texttable -noheader -AsJson
{ "Property_01": "james", "Property_02": "console", "Property_03": "Jun", "Property_04": "22", "Property_05": "08:34" }
{ "Property_01": "james", "Property_02": "ttys016", "Property_03": "Jun", "Property_04": "22", "Property_05": "10:00" }
{ "Property_01": "james", "Property_02": "ttys017", "Property_03": "Jun", "Property_04": "22", "Property_05": "14:42" }
{ "Property_01": "james", "Property_02": "ttys004", "Property_03": "Jun", "Property_04": "22", "Property_05": "22:08" }
{ "Property_01": "james", "Property_02": "ttys025", "Property_03": "Jun", "Property_04": "23", "Property_05": "00:38" }
Next Steps
This is still in pre-release and we know that there is still work to be done.
For example, the parser will create an object out of the header/data separator.
This is a little trickier than at first it would seem.
The text is inspected and columns width is decided based on the inspected text.
These header/data separator lines help the parser understand where the columns are separated.
This means we can’t just toss them out as the text is being read.
I’m sure you’ll find more things that we can do,
and we would love to get your feedback on this new cmdlet so please give this module a try.
Please submit your feedback to the repo directly via the issues tab, here.
Thanks so much!
Jim Truher
PowerShell Team
The post Microsoft.PowerShell.TextUtility module updates appeared first on PowerShell Team.