by veroli at 2013-04-25 06:03:10
Hello all,by ArtB0514 at 2013-04-25 06:09:32
i am trying to process the output from the netstat command but turn it into a one liner!
currently i have the following code
$results = netstat -a | select-object -skip 4
convertfrom-csv (($results -replace "\s+",",").trim(",")) -header Protocol,Local_Address,Foreign_Address,State | out-gridview
I am happy with this from an output point of view but how i can turn this into one line? i am not sure how to pipe $results into the second command
As you can see it takes the output from netstat strips off the top four lines, removes trailing spaces and formats into a csv so it can be nicely output into out-gridview.
regards
dan
This worked for me:by veroli at 2013-04-25 06:36:37$results = ((netstat -a | select-object -skip 4) -replace "\s+",",").trim(",") |
convertfrom-csv -header Protocol,Local_Address,Foreign_Address,State | out-gridview -PassThru
thanks much appreciated, sometimes it just takes another set of eyes doesnt it, i think i was getting messed up with the brackets in my attempts asby eisenbergz at 2013-04-25 07:00:35
i was building this command from much smaller pieces but couldnt get the last bit done.
thanks
Dan
You must be using v3. When I run that line, Art, I get "Method invocation failed because [System.Object] doesn’t contain a method named ‘trim’. ". It sees the results ofby ArtB0514 at 2013-04-25 08:22:41((netstat -a | select -skip 4) -replace "\s+",",")
as an array object (which doesn’t have a Trim method). Also, there is no -PassThru parameter for Out-GridView. Is there anything wrong here besides I’m using v2?
If I run it without the .trim() part, it works. I just have to add another header name so that all the data shows up.
(-header Null, Protocol,Local_Address,Foreign_Address,State)
Or, if I don’t fight it and just roll with it,((netstat -a | select -skip 4) -replace "\s+",",") |
works properly.
foreach {$.trim(",")} | convertfrom-csv -header Protocol,Local_Address,Foreign_Address,State | out-gridview
Ze’ev
Yep, you’re right about PS 3. Although PS2 won’t perform the trim method against the entire array, it will against the individual members. And because Out-GridView doesn’t have -PassThru, as you correctly mentioned, In order to save the array, you need to use two lines of code. So, here’s how I’d do this in PS2 (not too different from your solution):by rob_ful at 2013-04-25 12:06:49$results = netstat -a | select-object -skip 4 | foreach {($
-replace "\s+",",").trim(",")} |
convertfrom-csv -header Protocol,Local_Address,Foreign_Address,State
$Results | out-gridview
You could use this approach for external commands: Try creating a function that will convert the output into an PSCustomObject which you can output to any format.by ArtB0514 at 2013-04-25 12:45:15#requires -version 3.0
Function Get-Netstat {
$data = netstat -a | select-object -skip 4
$lines = $data | foreach { $.trim()}
$lines | foreach { $temp = $ -split "\s+"
[PSCustomObject]@{
Protocol = $Temp[0]
Local_Address = $Temp[1]
Foreign_Address = $Temp[2]
State = $Temp[3]
}
}
}
<#
Get-Netstat
Get-Netstat | Out-GridView
#>
Here’s the PowerShell 2 version of Rob’s approach (tested to work on both V2 and V3):#requires -version 2.0
Function Get-Netstat {
netstat -a | select-object -skip 4 | foreach {
$temp = ($_).Trim() -split "\s+"
New-Object PSObject -Property @{
Protocol = $Temp[0]
Local_Address = $Temp[1]
Foreign_Address = $Temp[2]
State = $Temp[3]
}
}
}
$Results = Get-Netstat
$Results | Out-GridView