PowerShell

PowerShell for Beginners (Part 3): The Parameters

Now, after the second part PowerShell for Beginners (Part 2): The Philosophy Verb-Noun, we’ll dedicate ourselves to the PowerShell parameters. But before we begin the answer of the second exercise. We also have a brief review of the second part.

All parts of the series can be found here: PowerShell for Beginners (Series)

Review (Part 2)

Exercise

In the second part I asked how to stop a process with PowerShell.

Find out the commands to do something with processes. I mean Windows processes. Use Get-Command (search for nouns with wildcards or TAB) to find all of them. Then open Notepad. Try to close this notepad process with PowerShell.

Well, the first part is to search for all commands related to processes. There are many ways to do this. I’ll show you two of them.


Get-Command -Noun Process

Unbenannt.JPG

This would also work:


Get-Command -Noun Proc*

The first one is more clear. Maybe you have found another way. Do not hesitate to post this as a commentary.

The next part is to open notepad. You can do this by searching notepad graphically or simply open notepad in PowerShell.

Unbenannt.JPG

Well, as we have seen there’s a command called Stop-Process. This sounds good. Let’s stop notepad with the command below.


Stop-Process -Name notepad

Well I have to admit that that was not as easy as it looks like. Some of you may have skipped the name parameter. This is not allowed. The parameter Name for the cmdlet Get-Process is a mandatory named parameter. This brings me to our topic for this third part of the series: Parameter.

Summary


Each PowerShell command called cmdlet contains a verb and a noun, separated by a hyphen. Get-Command shows all available PowerShell commands. Wildcards (*) are placeholders for any value. Use TAB for exploring whenever possible.


Fundamentals of Parameters

Mandatory Parameters (Required)

Let’s stick to the above example. How do I know that this parameter is a named and mandatory parameter? I’m good in reading the help. Type


Get-Help Stop-Process -Parameter Name

Unbenannt.JPG

As we can see, this parameter is required and named. What does this actually mean?

  • Required: means that this parameter is mandatory. So you have to specify the name of the process
  • Named: signifies that you have to type the parameter name and the argument (in our case notepad). Everything else leads to an error message

2.JPG

Positional Parameters

Which brings me to the next example. Most of PowerShell parameters are not mandatory, nor named. Some of them are positional parameters. Let’s take a look to this second example that shows the parameter LogName of the Get-EventLog cmdlet.


Get-Help Get-Eventlog -Parameter LogName

10.JPG

Crazy thing. It’s required but it’s position is not named, but 0. This means that you have to specify the LogName, but you can do it without the parameter name. The first argument that is given will be automatically bound to this parameter.. Let’s give it a try. PowerShell is asking me for the LogName, because LogName is a mandatory parameter. (Required? true)


Get-EventLog

1.JPG

There are 3 main types of Windows Event Logs: System, Application and Security. What happens if I enter one of the three without the parameter name? It works because the parameter is not named.


Get-EventLog System

Unbenannt.JPG

Switched Parameters

What if a Parameter does not require an argument? I mean parameters without any input, but with default values. They are called switched parameters. Let’s say you want to show what will happen if you restart your computer. (We’ve already done this before). The parameter for this is WhatIf.


Get-Help Restart-Computer -Parameter WhatIf

1.JPG

Now let’s compare the WhatIf parameter with another parameter which calls for an argument, for example a string. Note the red line. Unlike WhatIf, ComputerName requires a string.


Get-Help Restart-Computer -Parameter ComputerName

2.JPG

WhatIf requires no input. ComputerName calls for an HostName. This means that you can run the WhatIf parameter without any input. Look at this:


Restart-Computer -WhatIf

3.JPG

But we encounter problems when we try to restart a remote computer without specifying it’s name.


Restart-Computer -ComputerName

4.JPG

Conclusion

It’s not possible to cover all topics of parameters in a single blog post. You can start exploring all parameters by using the following command:


Get-Help Get-Eventlog -Parameter *

What have we learned so far?


Parameters are different. There are required, positional, switched, mandatory and not mandatory parameters. Get-Help can help you exploring all parameters of a command. To do this run Get-Help Your-Command -Parameter *. Use TAB whenever possible.


Some useful parameter examples to play with

At the end I would like to provide some useful examples you can play with. Don’t worry if the commands seems very complex to you. It’s ok. We haven’t done some things yet. They’re just for playing.

Retrieve the newest 5 Event Log Errors from the System Log


Get-EventLog -LogName System -Newest 5 -EntryType Error | Format-Table Time,EntryType,Message -AutoSize -Wrap

Unbenannt.JPG

Get the Filename of a Windows Process

For this notepad should be already started.


Get-Process notepad -FileVersionInfo

Unbenannt.JPG

Show all *.txt files in C:\Temp

Get-ChildItem is similar to dir, but much more powerful. The command below shows all txt files in C:\Temp.

10.JPG

The parameters can also be omitted.


Get-Childitem C:\Temp *.txt

Unbenannt.JPG

Exercise

Remember our Code of Practice:


Do it yourself. Anything you don’t do yourself will soon be forgotten. 


The exercise up to the next part is:

Why does this command not work?

Unbenannt.JPG

See you next time at the article PowerShell for Beginners (Part 4): The PowerShell Help (Get-Help)


Patrick Gruenauer, MVP PowerShell

Categories: PowerShell

Tagged as: ,

2 replies »

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 )

w

Connecting to %s