Skip to main content

How to use Write-Information

It is always fun to write on a topic that people are passionate about.  Yes, we will be talking about Write-Host in this post.  I know, you either love it or you hate it.

PowerShell uses different “streams” of information.  Here is a quick visual.

Stream |  Definition             | Cmdlet
1      |  Success output         | Write-Output      
2      |  Errors                 | Write-Error       
3      |  Warning messages       | Write-Warning     
4      |  Verbose output         | Write-Verbose     
5      |  Debug messages         | Write-Debug       
6      |  Informational messages | Write-Information 
NA     |  User Experience        | Write-Host         

The above is a little display that I use in class.  Yes, it is created with Write-HostWrite-Host is OK to use if you need to create a user interface of some type.  PowerShell was designed to use the pipeline.  This is stream 1.  Notice that there is no stream for Write-HostWrite-Host sends information directly to the monitor.  There is a stream for Write-Information.

Write-Information became available with PowerShell 5.  Why do we have another cmdlet to put information on the screen? Well, first of all, the end user cannot stop Write-Host from working.  Take a look at this.

PS C:\>     $InformationPreference
SilentlyContinue

The information stream is controlled by a global variable called $InformationPreferenceWrite-Host has no such global variable controlling it.  By default, your information messages are not displayed.

PS C:\> Write-Information -MessageData "Nothing will display"

PS C:\> 

However, you can override this in code.
PS C:\> Write-Information -MessageData "Something will display" -InformationAction Continue
Something will display

The –InformationAction parameter is one of the common parameters.  That means the user running the code can ask for your information messages if they want to see them.  You can also redirect the output of your information stream to another stream if it is appropriate.  You cannot do that with Write-Host because it sends information directory to the screen.  Below is a comparison of the two commands.

Feature
Write-Host
Write-Information
Writes directly to the screen
Yes
No
Can display colors
Yes
No
Can be suppressed by the user
No
Yes
Can be redirected to another stream
No
Yes
Can have TAGs in the metadata
No
Yes
Can be saved in a variable
No
Yes


I understand the draw that Write-Host has with its ability to display colors.  If you are creating a script that requires user interaction, go for it.  If you want code that works well with the pipeline and does not display information on the screen (Which can slow processing times) then consider making the switch to Write-Information.

Comments

Popular posts from this blog

Sticky Key problem between Windows Server 2012 and LogMeIn

This week I instructed my first class using Windows Server 2012 accessed via LogMeIn and discovered a Sticky Key problem every time you press the Shift key. Here is my solution to resolve this.  First off, in the Preferences of LogMeIn for the connection to the Windows Server, click General . Change the Keyboard and mouse priority to Host side user and click Apply at the bottom. On the Windows 2012 server, open the Control Panel – Ease of Access – Change how your keyboard works . Uncheck Turn on Sticky Keys . Click Set up Sticky Keys . Uncheck Turn on Sticky Keys when SHIFT is pressed five times . Click OK twice. If you are using Windows Server 2012 as a Hyper-V host, you will need to redo the Easy of Use settings on each guest operating system in order to avoid the Sticky Key Problem. Updated Information: March 20, 2013 If you continue to have problems, Uncheck Turn on Filter Keys .

With the AD Recycle Bin Turned on, What Happens when you Create a User Account with a Password that does not meet the Password Policy?

This was an interesting observation from one of my Windows Server 2012 classes.  While working with the AD Recycle bin in a lab, one of my students discovered some interesting accounts that were created. When he created user accounts that did not meet password complexity requirements, an account is temporarily made and then deleted.  When a new password is provided that meets the password requirements, then a new account is made. We discovered this in two places.  First off in the Active Directory Administrative Center.  This is what caused the initial confusion.  Take a look.  This is in the Deleted Objects OU. You can see multiple deleted accounts for Test2 and one for Test3.  Test3 is a valid, functioning user account.  Using the PowerShell command Get-ADObject –IncludeDeletedObjects –Filter * –Properties ObjectSID we can see that indeed, two accounts were created, with one of them deleted. Notice the RID portion of the SID is different. ...

Where did a User’s Account Get Locked Out?

Updated: May 15, 2015 When this article was originally published, two extra carriage returns were add causing the code to malfunction.  The code below is correct.   My client for this week’s PowerShell class had a really interesting question. They needed to know where an account is being locked out at. OK, interesting. Apparently users hop around clients and forget to log off, leading to eventual lock out of their accounts. The accounts can be unlocked, but are then relocked after Active Directory replication. This problem is solved in two parts. The first one is to modify the event auditing on the network. The second part is resolved with PowerShell. The first part involves creating a group policy that will encompass your Domain Controllers. In this GPO, make these changes. Expand Computer Configuration \ Policies \ Windows Settings \ Security Settings \ Advanced Audit Policy Configuration \ Audit Policies \ Account Management Double click User Account Management C...