I have a simple powershell script
$proc = Get-Process -id 412
$proc
it's return such output
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                                                                                                                                
-------  ------    -----      -----     ------     --  -- -----------                                                                                                                                                                
    434      26    65768     109144       6,42    412   1 browser
how can i get this output to a variable so i can use it somewhere else in script?
I tryed to use it likes this
$proc = Get-Process -id 412
Write-Host $proc
but it gives me not same output as $proc is a instance of "System.Diagnostics.Process" class
System.Diagnostics.Process (browser)
Write-Host, whose purpose is to write directly to the display, does not use PowerShell's rich output formatting system - it uses simple .ToString() formatting instead, which often results in unhelpful representations - see this answer for details.
If you explicitly want to print to the display (host) only while using rich formatting, use
Out-Host instead:
$proc | Out-Host # rich formatting, display output only
The Out-String cmdlet uses the same formatting and returns the formatted representation as data, in the form of a single, multi-line string
(by default).
However, if there's no concern about accidentally producing data output, via PowerShell's success output stream (see about_Redirection), you can simply use PowerShell's implicit output behavior, which also results in rich formatting if the data is ultimately sent to the display (in the absence of getting captured in a variable, sent through the pipeline, or getting redirected):
# Implicit output to the success stream, which, if not captured or redirected,
# prints to the display *by default*, richly formatted.
$proc  
The above is the implicit - and generally preferable - equivalent of Write-Output $proc; explicit use of Write-Output, whose purpose is to write to the success output stream, is rarely needed; see this answer for additional information.
It depends on exactly what you mean.  $proc is an object with properties.  If you do $x = $proc | out-string then $x will be the string representation of the default view.  However in terms of using it later you might like to do write-host $proc.Handles $proc.NPM $proc.PM $proc.WS $proc.CPU $proc.id $proc.SI $proc.ProcessName to access each of the individual elements.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With