Is there existing tooling to take text-based output and pipe it to a dynamic object that can be queried as columns?
Specifically, I'm invoking ..
query session /server:MYSERVER
.. which is outputting ..
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
console Jon 1 Active
This is my first task in a DevOps role, to act upon this output based on conditions of the columns, but after multiple tries to pipe into foreach etc I realized that it's all just multiple lines of strings.
What I was hoping for was something like ..
query session /server:MYSERVER | foreach `
{ `
if ($_.Username -eq "Jon") `
{`
custom-action $_.ID `
} `
}
(Note that I do not necessarily need to evaluate the Username, or not only the Username, I am only doing so in this example.)
Obviously this won't work because this ..
query session /server:192.168.1.103 | foreach { echo $_.GetType() }
.. outputs this ..
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
True True String System.Object
True True String System.Object
The only solution I've found is manually extracting the columns using String.Substring(). I was hoping there was PowerShell tooling that automated this.
[[This is an example,]] but some columns are blank, and the fixed-width columns are not the same width between each other, so parsing this would be much more manual than the examples there. I was hoping that Powershell version updates might have better tooling perhaps?
Using Windows Server 2012 R2 (which has PowerShell 4).