Using Write-* cmdlets
When writing PowerShell functions, it is often confusing to know exactly which cmdlet should be used to produce output. There are a number of cmdlets and methods that seem to do the same thing at first glance. The most important thing to remember in this context is that functions should always write objects to the output stream. In order to do this, there are several correct ways and one incorrect way that is frequently used.
Write-Host
PowerShell scripters who are beginners see the Write-Host
cmdlet as a simple way to produce output. It is similar to a PRINT
statement in many languages and if output to the console is the goal, it is a perfect fit. Unfortunately, the output is made solely to the console (or, in PowerShell terminology, the host). The following screenshot shows the main issue with Write-Host
:
Even though the function seems to output the string, attempting to capture the output in a variable shows that the value isn't actually output, but instead is...