Advanced Windows PowerShell Scripting Video Training

Advanced Windows PowerShell Scripting Video Training
Advanced Windows PowerShell Scripting Video Training

Wednesday, January 6, 2016

Reading and Resolving PowerShell Errors - Part 3

This is part 3 of my series of the most common PowerShell errors that are made in my PowerShell classes.  I will be posting one a day to help you understand why an error occurred and what the error’s meaning is.

Today’s error: A parameter cannot be found that matches parameter name

Here is our starting code:
Get-Date -Year 2018 -Month 9 -day 23 -ComputerName DC1

And here is the full error:
Get-Date : A parameter cannot be found that matches parameter name 'ComputerName'.
At line:1 char:38
+ Get-Date -Year 2018 -Month 9 -day 23 -ComputerName DC1
+                                      ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-Date], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetDateCommand

This is one of my favorites.  TAB Completion is a wonderful thing.  It helps us understand what parameters are available to us and prevents typos.  Many times I catch my students forcing a parameter into a cmdlet.  If the parameter will not TAB complete, then 1 of 2 things is the problem.
1 – The Parameter is not available for the cmdlet.  Just because one cmdlet has a ComputerName parameters does not mean every one does.
2 – The parameter is not part of the current parameter set.

To help with #1, take a look at the syntax block of the cmdlets help file.
SYNTAX
    Get-Date [[-Date] []] [-Day []] [-DisplayHint {Date | Time | DateTime}] [-Format []] [-Hour
    []] [-InformationAction {SilentlyContinue | Stop | Continue | Inquire | Ignore | Suspend}] [-InformationVariable
    []] [-Millisecond []] [-Minute []] [-Month []] [-Second []] [-Year []]
    []
   
    Get-Date [[-Date] []] [-Day []] [-DisplayHint {Date | Time | DateTime}] [-Hour []]
    [-InformationAction {SilentlyContinue | Stop | Continue | Inquire | Ignore | Suspend}] [-InformationVariable
    []] [-Millisecond []] [-Minute []] [-Month []] [-Second []] [-UFormat
    []] [-Year []] []

Get-Date has 2 syntax blocks.  This is because there are two parameters that cannot be used at the same time.  In any case, you will not find a –ComputerName parameter listed.  In other words, you cannot use this parameter with this cmdlet.

As for the parameter set, this can be a bit tricky.  If you Type Get-Date in the PowerShell ISE, you will see both –Format and –Uformat­ parameters listed

If you use one of those two parameters, the other is filtered out.


Resolution:
Use TAB completion or the cmdlets help file so you know what parameters can be used.  Also, do not force a parameter into a cmdlet.  It will not work.

For those of you who want a dinfinative list of which parameters can work together, check out my post on Finding the Required Parameters in Parameter Sets.  The code will list each parameter in each set for any cmdlet you want to examin.




No comments: