When teaching PowerShell, I use Write-Host often just to
display what is going on. It may be to
show the result of an IF or SWITCH construct.
Maybe to let us know that a value incremented. In practice, I avoid placing text on the
screen unless the user specifically asks for it. Write-Host places
information directly onto the screen. Write-Verbose and Write-Information places information in a data stream that eventually ends up on your screen. This is bad for a few
reasons.
First of all, the extra screen candy can be frustrating to watch. Second, it takes time to write anything to the
screen. This is never good. You should only display information if necessary
and give the user a chance to suppress that information. I decided to do a little test between
Write-Host, Write-Verbose, Write-Information, and displaying nothing. The code below loops 100 times for each command
and again where nothing is performed in the loop.
Function Test-DisplayHost
{
For($X = 0 ; $X -lt 100 ;$X++)
{
Write-Host
"Write-Host $X" -ForegroundColor
green
}
}
Function Test-DisplayVerbose
{
For($X = 0 ; $X -lt 100 ;$X++)
{
Write-Verbose
"Write-Verbose $X" -Verbose
}
}
Function Test-DisplayInformation
{
For($X = 0 ; $X -lt 100 ;$X++)
{
Write-Information
"Write-Information $X" -InformationAction Continue
}
}
Function Test-NoDisplay
{
For($X = 0 ; $X -lt 100 ;$X++)
{
}
}
Write-Host "Testing
Write-Host" -ForegroundColor Cyan
$WriteHost = Measure-Command -Expression
{
Test-DisplayHost
}
Write-Host "Testing
Write-Information" -ForegroundColor
Cyan
$WriteVerbose = Measure-Command -Expression
{
Test-DisplayVerbose
}
Write-Host "Testing
Write-Information" -ForegroundColor
Cyan
$WriteInformation = Measure-Command -Expression
{
Test-DisplayInformation
}
Write-Host "Testing
Nothing" -ForegroundColor Cyan
$WriteNoting = Measure-Command -Expression
{
Test-NoDisplay
}
Write-Host "Write-Host | $($WriteHost.Ticks)"
Write-Host "Write-Verbose | $($WriteVerbose.Ticks)"
Write-Host "Write-Information
| $($WriteInformation.Ticks)"
Write-Host "Write
nothing | $($WriteNoting.Ticks)"
Here is the final output:
Write-Host |
1167467
Write-Verbose |
400858
Write-Information | 599326
Write nothing |
6445
Two things that I took note of when running this code
multiple times. The first is Write-Host always took longer. The second, not displaying anything is always
faster.
The lessons learned here is to use Write-Verbose and
Write-Information. This allows the user
to call the extra screen candy if they want, and suppress it when they do
not. Remember that Write-Information is
a PowerShell 5 cmdlet.
Comments