First time here? Check out the site's "greatest hits" or read a post from the archives. Feel free to leave a comment or ask a question, and consider subscribing to the latest posts via RSS or e-mail. Thanks for visiting!
« Hanselminutes Podcast 27 - Reflection | Main | Replacing Start Run - The Quest Continue... »

WhatIf Powershell

Posted in PowerShell.

One of the best (little known?) features about Powershell is the -WhatIf switch. A script or cmdlet can have parameters, of course, like

param( [string] $foo )

but it can also have switches that are on or off like

param ( [switch] $verbose )

One of the mostly ubiquitous switches is -WhatIf for commands that could "do damage." For example:

PS> del foo.txt -whatif
What if: Performing operation "Remove File" on Target "C:\\foo.txt".
PS> get-process outlook | stop-process -WhatIf
What if: Performing operation "Stop-Process" on Target "OUTLOOK (2540)".

Drink in how useful this can be. Fabulous. Anyway, so we wanted to make our own scripts have this ability. Since our scripts are mostly strung together with built-in commands, we want to have a WhatIf switch be inherited by the sub-commands.

Switches are either present or not present so I tried a silly thing like this:

param ( [string] $file, [switch] $WhatIf)
if ($WhatIf.IsPresent) { $WhatIf = "-WhatIf" }
del $file $WhatIf

But was reminded by Keith Hill that this was cleaner:

"You can forward switch params to cmdlet parameters of type switch like so"

param([string]$file, [switch]$WhatIf=$false)
del $file -WhatIf:$whatif

"Bruce Payette and I had a newsgroup exchange on this a while back and he mentioned that they made sure you could still pass a "value" to a switch parameter for this very reason. I don't know of any other ways to make this better though."

Thanks Keith!

Technorati :
Del.icio.us :



Comments are closed.

Contact

Sponsors

Hosting By

On this page...

Tags

Calendar

<October 2008>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

Archives

Google Ads