Guy recommends :
Free Solarwinds
VM Console

Solarwinds VM Console Free Download

Find out which of your VMs are a waste of space and which VMs need more resources.



PowerShell Scripting  -WhatIf and -Confirm

Introduction to PowerShell Scripting -WhatIf and -Confirm

PowerShell's WhatIf and confirm are two great commands for testing complicated scripts without risking the code running amok.  For example, if you decide to delete files by using a script containing wildcards, there could be all manner of unexpected side effects.  By employing PowerShell, and appending the -whatIf switch, you get a preview of would happen without risking any damage.

PowerShell WhatIf and -Confirm Commands

 ♣

Mission to Delete Files

Let us take a real life example, we wish to delete files, but because we are using wildcards we are concerned about deleting the wrong type of file.  Instead of gung-ho Guy deleting the files - ready or not, we will take the cautious approach and append -whatIf.  The result is PowerShell completes the command and shows us the result, but does not delete any files.  Incidentally, I cannot find a delete verb in PowerShell, there is however, a remove verb.

PowerShell -whatIf Example

By adding -whatIf at the end of the command we are saying to PowerShell: 'Just test, don't actually make any permanent changes'.  Please note, there could be serious consequences if you don't use the -whatIf switch.  If you don't understand what you are doing, you could delete all your .txt files.

# PowerShell -WhatIf safety parameter
Clear-Host
Get-Childitem C:\SomeFile\*.txt -recurse | remove-Item -whatIf

Note 1: For safety I chose a fictitious folder, just in case the script ran amok.

A breakdown of what the above script achieves

Get-Childitem  (Rather like dir)
C:\SomeFile (Location to start)
-include *.txt  (The pattern to look for)
-recurse (Search subdirectories)
| remove-Item (The equivalent of Delete)
-whatIf (PowerShell please test, but don't actually complete the operation, in this case, just show me which files with a .txt extension would be deleted if I removed the -whatIf).

Another example of the  -whatIf switch

Guy Recommends:  Solarwinds' Free Bulk Import ToolFree Download of Solarwinds  Bulk Import Tool

Import users from a spreadsheet.  Just provide a list of the users with their fields in the top row, and save as .csv file.  Then launch this FREE utility and match your fields with AD's attributes, click to import the users.  Optionally, you can provide the name of the OU where the new accounts will be born.

There are also two bonus tools in this free download, and all 3 have been approved by Microsoft:

  1. Bulk-import new users into Active Directory.
  2. Seek and zap unwanted user accounts.
  3. Find inactive computers.

Download your FREE bulk import tool.

PowerShell -Confirm Example

Here is another PowerShell parameter that you append to a 'normal' script - confirm.  It really is a case of confirm by name, and confirm by nature.  PowerShell says to you: 'Do you really want to do this?'

# PowerShell -confirm parameter
Get-Childitem C:\Dzxocs\*.* -include *.txt -recurse | remove-Item -confirm

Note 2: For safety I chose a fictitious folder, just in case the script went wrong.

The result of -confirm is that PowerShell presents you with choices, however, remember this is now 'live' therefore if you press [Y] or [A] then files will be deleted.

[Y] Yes [A] Yes to all  [N] No  [L] No to all [S] Suspend

PowerShell -Confirm:$False

I stumbled upon the $False commands for unattended scripts.  What I am thinking is that if you are running scripts which require a response, then you could try appending -Confirm:False  (do remember that colon).

# PowerShell -confirm for unattended machines
Restart-Service Bits -Confirm:$False

How To Research PowerShell Cmdlets Containing -Confirm and -WhatIf

My idea behind this research is to list the PowerShell cmdlets that contain 'confirm' in their parameters.

# Research PowerShell parameters for 'Confirm'
Get-command | where { $_.parameters.keys -contains "Confirm"}

Refine Get-Command with -CommandType

# PowerShell Confirm cmdlets
Get-Command -commandType cmdlet `
| where { $_.parameters.keys -contains "Confirm"} | Format-Table Name

Note 3: You could substitute 'WhatIf' for 'Confirm'.

Summary of PowerShell -WhatIf and -Confirm Commands

PowerShell's WhatIf switch is hand if you need a dry run of your script.  Once you have used PowerShell's -confirm, or -WhatIf commands you will think, 'Why don't all scripting languages have these safety features'.

If you like this page then please share it with your friends

 


See more PowerShell examples for syntax advice

PowerShell Tutorials  • Syntax  • PowerShell functions  • Plist  • RegEx  • -Com

PowerShell -confirm  • WhatIf  • -Match  • -Like  • -Online  • Where

-ErrorAction  • -Replace  • Windows PowerShell  • PowerShell module directory

Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.

Download my ebook:Getting Started with PowerShell
Getting Started with PowerShell - only $9.25

You get 36 topics organized into these 3 sections:
   1) Getting Started
   2) Real-life tasks
   3) Examples of Syntax.

In addition to the ebook, you get a PDF version of this  Introduction to PowerShell ebook  It runs to 120 pages of A4.

 *


Custom Search

Guy Recommends: WMI Monitor and It's Free!Solarwinds WMI Monitor

Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft operating systems.

Fortunately, Solarwinds have created the Free WMI Monitor so that you can actually see and understand these gems of performance information.  Take the guess work out of which WMI counters to use for applications like Microsoft Active Directory, SQL or Exchange Server.

Download your free copy of WMI Monitor

 

Home Copyright © 1999-2012 Computer Performance LTD All rights reserved

Please report a broken link, or an error.