Quick PowerShell Stuff 9

As part of my series on Quick PowerShell stuff, I like to share brainstorms or ideas that I have that lead to usable scripts. This script is usable in relative terms, but I think it is more of an exercise of what you can do with PowerShell. The script also reveals some information that I feel is relevant and hence I wrote the script more for this purpose.

The Purpose
A fellow MVP mentioned that he noticed that the workload cmdlets from CU5 and before were missing from Exchange and after investigating I wrote an article on this. Then it dawned on me that if Microsoft followed their previous practices for deprecating cmdlets, I should be able to search for it. So basically the script gets a list of all the commands that pertain to Exchange. Then the script will loop through each command. It runs a get-help -full and looks for the word ‘deprecated’ if present. First iteration of the script:

$commands = (get-command | where {$_.modulename -eq "<server name>"}).name

foreach ($line in $commands) {
	$result = get-help $line -full
	if ($result -like "*deprecated*") {
		write-host "$line is going to be deprecated!" -foregroundcolor yellow
	} else {
		# write-host "$line is not going to be deprecated!" -foregroundcolor green

The warning message will appear like this:


If the word is not there, the results will look more like this:


However, I noticed I was getting inaccurate results. Apparently the “-like” switch seems to search the last part of the variable and would not find anything if the word was in the first part of the variable. So I re-wrote the script:

The Script
The re-write stored the help as a txt file and then searches that file for the criteria. However, this criteria does produce some false positives as well, namely if a feature is deprecated and not the entire PowerShell cmdlets. Here is the code as is:

$commands = (get-command | where {$_.modulename -eq "lab02-ex01.lab2.local"}).name

foreach ($line in $commands) {
	get-help $line -full > c:\downloads\command.txt
    $search = Select-String -Path c:\downloads\command.txt -pattern "cmdlet will be removed in a future version of"
    $search2 = Select-String -Path c:\downloads\command.txt -pattern "cmdlet has been deprecated"
	if ($search -ne $null) {
		write-host "$line is going to be deprecated!" -foregroundcolor yellow
    if ($search2 -ne $null) {
		write-host "$line is going to be deprecated!" -foregroundcolor yellow
    remove-item c:\downloads\command.txt

Any result means the cmdlet or a switch is deprecated.

Here is what we are looking for in the get-help of the cmdlets:


and something like this as well:


As a working example, I ran this in my lab, which is Exchange 2013 SP1. I found these commands were either deprecated or going to deprecated:

  • Enable-AntispamUpdates
  • Clear-ActiveSyncDevice
  • Clear-ActiveSyncDevice
  • Get-ActiveSyncMailboxPolicy
  • Get-ActiveSyncDevice
  • Get-ActiveSyncMailboxPolicy
  • Get-TransportServer
  • New-ActiveSyncMailboxPolicy
  • Set-ActiveSyncMailboxPolicy
  • Set-TransportServer

This script can be run on any version of Exchange 2013.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s