Prof. Powershell
Suits Me to a Tee
The Tee-Object cmdlet offers up another way of seeing data coughed up by other output cmdlets.
- By Jeffery Hicks
- 10/06/2009
When you run a command in PowerShell, the output is written to the console:
PS C:\ get-service
Simple enough. If you want to save the results to a text file, I recommend using the Out-File cmdlet and not the legacy console redirection characters of > and >>:
You have to be careful here as what you see on the screen is exactly what gets saved to the text file. If the output is truncated on the screen it will be truncated in the file. I’ll show you other ways to handle this another time.
But what if you want to see the results and save them to a file? For that we’ll use the Tee-Object cmdlet, which has an alias of Tee:
PS C:\> ps | where {$_.workingset -gt 5mb} | sort workingset -desc | tee data.txt
Smashing. This has some other interesting applications because Tee-Object keeps sending the original objects down the pipeline. Thus, I can have an expression like this:
PS C:\> ps | where {$_.workingset -gt 5mb} | sort workingset -desc | tee data.txt | measure-object workingset -sum
Count : 11
Average :
Sum : 355483648
Maximum :
Minimum :
Property : WorkingSet
I won't see the output from Get-Process as I did before. The original process objects are passed to Measure-Object which writes a different object to the pipeline, but the results will still be saved to the text file.
You can also use Tee to save objects to a variable instead of a file. Use the –variable parameter:
PS C:\> ps | where {$_.workingset -gt 5mb} | sort workingset -desc | tee -variable procs | export-clixml procdata.xml
PS C:\> $procs.count
11
PS C:\> (import-clixml procdata.xml).count
11
My main point here is to demonstrate that it's all the same data that can be used, in essence, simultaneously. As always, don't forget to take a moment and look at help for Tee-Object.
About the Author
Jeffery Hicks is an IT veteran with over 25 years of experience, much of it spent as an IT infrastructure consultant specializing in Microsoft server technologies with an emphasis in automation and efficiency. He is a multi-year recipient of the Microsoft MVP Award in Windows PowerShell. He works today as an independent author, trainer and consultant. Jeff has written for numerous online sites and print publications, is a contributing editor at Petri.com, and a frequent speaker at technology conferences and user groups.