• No results found

PowerShell for the IT Administrator Part 1 Lab Manual v1.1

N/A
N/A
Protected

Academic year: 2021

Share "PowerShell for the IT Administrator Part 1 Lab Manual v1.1"

Copied!
361
0
0

Loading.... (view fulltext now)

Full text

(1)

PowerShell for the IT

Administrator, Part 1

(2)

Conditions and Terms of Use

Microsoft Confidential - For Internal Use Only

This training package is proprietary and confidential, and is intended only for uses described in the training materials. Content and software is provided to you under a Non-Disclosure Agreement and cannot be distributed. Copying or disclosing all or any portion of the content and/or software included in such packages is strictly prohibited. The contents of this package are for informational and training purposes only and are provided "as is" without warranty of any kind, whether express or implied, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, and non-infringement.

Training package content, including URLs and other Internet Web site references, is subject to change without notice. Because Microsoft must respond to changing market conditions, the content should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information presented after the date of publication. Unless otherwise noted, the companies, organizations, products, domain names, e-mail addresses, logos, people, places, and events depicted herein are fictitious, and no association with any real company, organization, product, domain name, e-mail address, logo, person, place, or event is intended or should be inferred.

(3)

Copyright and Trademarks

© 2012 Microsoft Corporation. All rights reserved.

Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property.

Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation.

For more information, see Use of Microsoft Copyrighted Content at http://www.microsoft.com/about/legal/permissions/

Microsoft®, Internet Explorer®, and Windows® are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. Other Microsoft products mentioned herein may be either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. All other trademarks are property of their respective owners.

(4)
(5)

Contents

LESSON 1 DEMONSTRATION : INTRODUCTION ... 9

HOW TO USE THE EXAMPLES IN THIS WORKSHOP ... 10

EXERCISE 1: WINDOWS POWERSHELL ... 14

EXERCISE 2:THE POWERSHELL INTEGRATED SCRIPTING ENVIRONMENT (ISE) ... 17

EXERCISE 3:POWERSHELL V2.0INSTALLATION AND PREREQUISITES ... 20

EXERCISE 4:BASIC POWERSHELL COMMANDS ... 23

EXERCISE 5:RUNNING EXTERNAL COMMANDS ... 26

EXERCISE 6:LIST POWERSHELL COMMANDS ... 28

EXERCISE 7:GETTING HELP WITH POWERSHELL... 30

EXERCISE 8:EXPLORE COMMAND HISTORY ... 32

LESSON 1 HANDS-ON : INTRODUCTION ... 34

EXERCISE 1:CREATE A TRANSCRIPT OF COMMANDS ... 35

EXERCISE 2:USING THE MOST COMMON COMMANDS... 37

EXERCISE 3:RUN MULTIPLE COMMANDS ... 39

LESSON 2 DEMONSTRATION : COMMANDS AND OBJECTS ... 41

EXERCISE 1:POWERSHELL COMMANDS ... 42

EXERCISE 2:COMMAND ALIASES ... 47

EXERCISE 3:THE OBJECT-BASED SHELL ... 49

EXERCISE 4:THE .NETOBJECT MODEL ... 56

LESSON 2 HANDS-ON : COMMANDS AND OBJECTS ... 60

EXERCISE 1:POWERSHELL COMMANDS ... 61

EXERCISE 2:DISCOVERING OBJECT MEMBERS ... 65

EXERCISE 3:CREATING OBJECT INSTANCES ... 68

LESSON 3 DEMONSTRATION : PIPELINE ... 72

EXERCISE 1:UNDERSTAND THE FUNDAMENTAL OPERATORS ... 73

EXERCISE 2:UNDERSTAND PIPELINE USAGE, SYNTAX, AND THE PIPELINE VARIABLE ... 78

EXERCISE 3:FILTERING,SORTING, AND GROUPING DATA ... 82

EXERCISE 4:PIPELINE INPUT AND OUTPUT ... 87

LESSON 3 HANDS-ON : PIPELINE ... 91

EXERCISE 1:POWERSHELL OPERATORS ... 92

EXERCISE 2:THE POWERSHELL PIPELINE ... 94

EXERCISE 3:FILTER AND SORT WITH THE PIPELINE ... 98

LESSON 4 DEMONSTRATION : PROVIDERS ... 103

EXERCISE 1:PROVIDER INTRODUCTION...104

(6)

EXERCISE 3:SINGLE LEVEL PROVIDERS ...115

EXERCISE 4:MULTIPLE LEVEL PROVIDERS ...120

LESSON 4 HANDS-ON : PROVIDERS ... 129

EXERCISE 1:WORK WITH ENVIRONMENT PROVIDER ...130

EXERCISE 2:WORK WITH THE CERTIFICATE PROVIDER ...133

EXERCISE 3:WORKING WITH THE REGISTRY PROVIDER ...136

LESSON 5 DEMONSTRATION : VARIABLES AND TYPE FUNDAMENTALS ... 139

EXERCISE 1:WORKING WITH VARIABLES ...140

EXERCISE 2:BASIC VARIABLE TYPES IN POWERSHELL ...145

EXERCISE 3:WORKING WITH ARRAYS ...153

EXERCISE 4:WORKING WITH HASH TABLES ...157

EXERCISE 5:WORKING WITH CONSOLE INPUT-OUTPUT ...160

EXERCISE 6:WORKING WITH FILES ...162

EXERCISE 7:POWERSHELL ERROR OBJECT ...166

LESSON 5 HANDS-ON : VARIABLES AND TYPE FUNDAMENTALS ... 171

EXERCISE 1:WORKING WITH VARIABLES ...172

EXERCISE 2:WORKING WITH ARRAYS ...174

EXERCISE 3:WORK WITH HASH TABLES ...176

EXERCISE 4:WORK WITH HASH TABLES AND CALCULATED OBJECT PROPERTIES ...178

LESSON 6 DEMONSTRATION : SCRIPTING ... 181

EXERCISE 1:SCRIPTING IN POWERSHELL ...183

EXERCISE 2:ITERATION STATEMENTS ...189

EXERCISE 3:FLOW CONTROL STATEMENTS ...193

EXERCISE 4:OTHER STATEMENTS ...196

EXERCISE 5:FUNCTIONS ...200

EXERCISE 6:PROFILES ...206

EXERCISE 7:DOT SOURCING AND SCRIPT LIBRARIES ...209

LESSON 6 HANDS-ON : SCRIPTING ... 211

EXERCISE 1:CREATE POWERSHELL SCRIPTS ...212

EXERCISE 2:CREATE FUNCTIONS IN SCRIPTS ...213

EXERCISE 3:CREATE POWERSHELL PROFILES ...214

EXERCISE 4:EXPLORE ITERATION STATEMENTS IN POWERSHELL ...215

LESSON 7 DEMONSTRATION : ACTIVE DIRECTORY ADMINISTRATION (ADSI) ... 219

EXERCISE 1:ACTIVE DIRECTORY FUNDAMENTALS ...220

EXERCISE 2:SEARCHING ACTIVE DIRECTORY ...224

EXERCISE 3:THE DIRECTORY OBJECT LIFECYCLE ...230

(7)

EXERCISE 1:CREATE MULTIPLE USERS ...240

LESSON 8 DEMONSTRATION : ACTIVE DIRECTORY ADMINISTRATION (CMDLETS) ... 244

EXERCISE 1:USING THE ACTIVE DIRECTORY MODULE ...245

EXERCISE 2:USING THE ACTIVE DIRECTORY PROVIDER ...247

EXERCISE 3:CMDLETS AND IDENTITY...249

EXERCISE 4:SEARCHING ACTIVE DIRECTORY USING CMDLETS ...252

EXERCISE 5:CREATING ACTIVE DIRECTORY OBJECTS USING CMDLETS ...254

EXERCISE 6:MODIFYING OBJECTS USING CMDLETS ...256

EXERCISE 7:POWERSHELL CREDENTIAL OBJECTS AND USING ALTERNATIVE CREDENTIALS FOR CMDLETS ...257

LESSON 8 HANDS-ON : ACTIVE DIRECTORY ADMINISTRATION (CMDLETS) ... 258

EXERCISE 1: CREATING MULTIPLE USERS IN AN ORGANIZATIONAL UNIT ...259

EXERCISE 2:MODIFYING AD OBJECTS VIA CMDLETS ...262

EXERCISE 3:SEARCHING AD OBJECTS VIA CMDLETS ...264

LESSON 9 DEMONSTRATION : WINDOWS MANAGEMENT INSTRUMENTATION (WMI) ... 267

EXERCISE 1:INTRODUCTION TO WMI ...268

EXERCISE 2:WMICLASSES AND QUERIES ...272

EXERCISE 3:WMIREMOTING AND METHOD EXECUTION ...281

EXERCISE 4:COMMON WMICLASSES USED ...286

LESSON 9 HANDS-ON : WINDOWS MANAGEMENT INSTRUMENTATION (WMI) ... 290

EXERCISE 1:WMICLASSES AND QUERIES ...291

EXERCISE 2:BASIC FILTERING ...293

EXERCISE 3:WMIMETHOD EXECUTION ...296

LESSON 10 DEMONSTRATION : REGISTRY, EVENT LOG AND ACL MANAGEMENT ... 301

EXERCISE 1:USING THE REGISTRY PROVIDER ...302

EXERCISE 2:REMOTE REGISTRY MANAGEMENT ...310

EXERCISE 3:EVENTLOG CMDLETS...315

EXERCISE 4:FILE AND FOLDER ACLMANAGEMENT ...320

LESSON 10 HANDS-ON : REGISTRY, EVENT LOG AND ACL MANAGEMENT ... 322

EXERCISE 1:READING REGISTRY INFORMATION FROM A REMOTE HOST ...323

EXERCISE 2:SEARCHING EVENT LOGS FOR EVENTS ...326

EXERCISE 3:FILE AND FOLDER ACLMANAGEMENT ...330

LESSON 11 DEMONSTRATION : REMOTING ... 334

EXERCISE 1:REMOTE MANAGEMENT WITHOUT POWERSHELL REMOTING ...335

EXERCISE 2:ENABLE POWERSHELL REMOTING ...338

EXERCISE 3:ENABLE POWERSHELL REMOTING WITH THE ACTIVE DIRECTORY GROUP POLICY OBJECT (GPO) ...340

EXERCISE 4:EXECUTE A SINGLE REMOTE COMMAND OR SCRIPT ...342

(8)

EXERCISE 6:CREATE AN INTERACTIVE SESSION WITH A REMOTE MACHINE ...348

EXERCISE 7:CREATE A SESSION CONFIGURATION ...350

LESSON 11 HANDS-ON : REMOTING ... 354

EXERCISE 1:EXECUTE REMOTE COMMANDS ...355

EXERCISE 2:EXECUTE COMMANDS VIA SESSIONS ...357

(9)

PowerShell for the IT

Administrator, Part 1

(10)

Lesson 1 Demonstration : Introduction

Introduction

The way this lesson is presented is a little different to what you might be used to. You would have noticed that there is no workbook and that we are starting with the lab manual. What we are going to do is walk through some examples as an instructor led lab format and then you will complete some lab exercises by yourself.

Objectives

After completing this lab, you will be able to:

 Understand the basic use and capabilities of Windows PowerShell

 Meet the pre-requisites and install Windows PowerShell

 Run basic PowerShell commands

 Use PowerShell help to get help about PowerShell commands

Prerequisites

To complete this lab, you need:

 A Windows 7 workstation logged onto with administrator credentials. You can logon as

contoso\administrator. The password is P@ssword

Estimated Time to Complete this Lab

60 minutes

(11)

How to use the Examples in this Workshop

The way with lesson will be presented will be a little different to what you may be used to. You would have noticed that there is no workbook and that we are starting with the lab manual. What we are going to do is walk through the examples together as an instructor led lab format, and then you will do some more lab exercises by yourself. There are three options you can choose from for following the examples:

 Manually type in the commands

 Open the command files in the PowerShell Integrated Scripting Environment (ISE) and execute each command by selecting each one

Using the automated start-demo PowerShell script to run each command automatically Each option is a matter of preference. The first option will familiarize you with the

commands. This is the slowest option and you may have problems keeping up with the instructor, but this is a great option to run through after the workshop at your own pace to consolidate your learning.

The second and third options are easier as they do not require type each command. However, as you are not typing each command you may miss some commands.

If you use the second option, the command file can be opened and commands can still be typed using the command pane. This allows you to run some of the command from the file and type others.

The third option is the easiest option to run the demo commands. However, you cannot enter additional commands manually. This can be easily solved by opening a second PowerShell console and typing the additional commands.

Option 1: Run Commands Manually

This option is to type the command in manually as they appear in the code blocks of each example. You can use tab completion in PowerShell to reduce typing time. Also You can use the up arrow to select the most recent commands executed if you need to build from the previous command.

Option 2: Use of Command Files and the ISE

To use the ISE and the command files, change the default view of the ISE to maximize the Real Estate screen. To maximize the Real Estate screen,

1. Select the Start button to open the PowerShell ISE. 2. Type ISE and run the Windows PowerShell ISE.

(12)

Figure 1

3. Click one of the three rightmost buttons in the toolbar to adjust the pane arrangement. This makes it easier to follow all examples.

(13)

Figure 2

In this view,

1. Open the command file, or files for the lesson. 2. Select each line that does not start with #.

3. Press F8 or right-click and select Run or click the icon on the toolbar.

Option 3: Use of Start-Demo Script

Using the start-demo script is the easiest option. To use this option, your PowerShell console should be opened as normal and the location should be changed to C:\Pshell\part1\lesson1

for lesson 1.

1. To change the location, type:

set-location c:\pshell\part1\lesson1

2. Now type the following command to load the start-demo.ps1 script function into the memory:

. .\start-demo.ps1

(14)

3. Now type the following command to start the demo script: Start-demo <demo_script.txt>

Where <demo_script.txt> is the demo script file for the lesson or exercise.

Note: To exit the demo script at any time you can use the ctrl + c keys.

The script will display the last line number used. 4. To restart the script type the following command:

Start-demo <demo_script.txt> <line number>

(15)

Exercise 1: Windows PowerShell

Objectives

In this exercise, you will:

 Learn what Windows PowerShell is

 Open Windows PowerShell and run some basic commands

Scenario

Welcome to Windows PowerShell.

Windows PowerShell is both a command shell and a scripting language. A significant difference between PowerShell and other shells is that it is an object-oriented shell. This aspect of PowerShell will be discussed in detail later.

The use of Windows PowerShell can be divided into two main areas:

 Running commands from the command shell interactively

 Running scripts

Running scripts will be discussed later. For now, we will discuss running commands in the shell. Both categories of use of PowerShell are powerful. Depending on the task being performed will determine which category to use. For example, Exchange 2007 or 2010 administrators will be familiar with running commands in the command shell but they may not be familiar with running scripts. We will start with opening PowerShell and running commands in the console.

Task 1: Log on to the VM Environment

1. Log on to the Windows 7 client.

2. Open Windows PowerShell and run the required commands.

Task 2: Open Windows PowerShell for the First Time

There are different methods to open Windows PowerShell. Each method has its own purpose. The first one we use is the simplest.

1. Open PowerShell.

2. On the Windows taskbar, click (PowerShell icon). The PowerShell window appears.

You will notice that it looks different to the standard command prompt. It should have a blue background and white text. It will also have the text

PS C:\users\administrator> PS indicates that you are using PowerShell and not the

(16)

Task 3: Run the First Command

1. Type the following command:

dir

You will see that now you have displayed the files and folders that are available from your current location. Let us compare the PowerShell display and the CMD shell display. 2. Click Start > Run, type cmd and press Enter.

3. In the CMD shell, type the following command: dir

4. Compare the output of PowerShell and the output of the CMD shell.

You will notice that they are very different. The main advantage of PowerShell is that it is easy to change the view.

Task 4: Change PowerShell View

1. In the PowerShell console, type the following command to display the file system objects:

dir | format-table name, lastwritetime, length

You will see that we now have the same information but it appears very differently. Now let us open PowerShell from the run box. It will look different.

2. Click Start > Run, type powershell and press Enter.

The PowerShell prompt appears, but this time you will see it looking more like the CMD shell, as it has the black backgorund and the grey text. Note that it will have the PS

C:\users\administator> prompt.

3. In the PowerShell console, type the following command to display the file system objects:

dir | format-table name, lastwritetime, length

You will notice that the output is the same as in the blue background window. Now, close the black background window and let us run another command in the blue background window.

4. Type the following command to display processes. get-process

A list of all the processes running on your machine appears. Now, run the same command from the command prompt.

5. Click Start > Run and type the following command: powershell –command get-process

(17)

You will see the command run and produce the output, but the window closes as soon as it finishes running the command. To prevent this, you have the option of keeping the window open after you run the command. You will do this now using the noexit option. Note that this needs to be before the –command option.

6. Click Start > Run and type the following command: PowerShell –noexit –command get-process

You will now see that the command is executed and the window stays open. You can explore other options for running PowerShell.exe and commands by typing PowerShell /?

(18)

Exercise 2: The PowerShell Integrated Scripting

Environment (ISE)

PowerShell v2.0 comes with its own graphical scripting editor known as the ISE. The ISE is a fully integrated scripting environment that both aids in using PowerShell and enhances it. The ISE is installed by default on Windows 7 machines, and installed automatically on

workstations as part of the Windows management framework package (that includes

PowerShell v2). On Windows Server 2008 R2, it is a feature that you have to enable, or select to install on other operating systems. Once you have the ISE available then it can be run. 1. On your workstation click Start > Run and type PowerShell ISE and press Enter.

The PowerShell ISE opens and you will see the three parts of it.

Figure 3

Script Pane

Allows you to create and run scripts. You can open, edit, and run existing scripts in the Script Pane.

Output Pane

Displays the results of the commands and scripts you have run. You can also copy and clear the contents in the Output Pane.

(19)

Command Pane

Allows you to type commands. You can run a one-line command or a multi-line

command in the Command Pane. Press SHIFT+ENTER to enter each line of a multiline command, and press Enter after the last line to execute the mult-line command. The prompt displayed on top of the Command Pane shows the path to the current working directory.

From here, we can run PowerShell commands and view the results.

Task 1: Run PowerShell

1. Click the Command pane and type the following command: dir | format-table name, lastwritetime, length

You will now see in the output pane the results of the command. This is just like having a PowerShell console open, but we are running these commands from within the ISE. Now will we run some commands from the script pane.

2. Click the Script pane and type the following: get-process

You can open the file _ISE-commands.ps1 if you do not want to type the commands. 3. On the next line, type the following command:

dir | format-table name, lastwritetime, length 4. On the next line type the following:

write-host “Hello from PowerShell!”

You will notice that the ISE will now color code the different parts of each command. This is to help identify the different parts of each command such as the command part, and strings code blocks.

Task 2: Run All Commands

You can now run all commands using the Run button(or press F5) or select the line or part of the line to be run.

1. Drag and select the text you want to run.

2. Use the Run selection button or press F8 to run the command. 3. Select the first line that has get-process and select the text. 4. Select the Run selection button or press F8 to run the command.

You will see that in the output pane, you have the results of the get-process command. 5. Select the second line with dir | format-table name, lastwritetime, length and run this

selection.

(20)

6. Click the Run button or press F5 to run all the commands. You will see the output of all commands.

7. Keep the ISE open and run commands in it, or close the ISE and run commands in the PowerShell.

(21)

Exercise 3: PowerShell V2.0 Installation and

prerequisites

Before you run PowerShell, you must make sure it is available. PowerShell v2.0 is installed by default on Windows 7 and Windows Server 2008 R2. Therefore, for these operating systems you do not have to do anything additional to make PowerShell available.

For operating systems other than Windows 7 and Windows Server 2008 R2 , you will need to download and install the Windows Management Framework package. It is available from http://support.microsoft.com/default.aspx/kb/968929. This package will install Windows PowerShell 2.0, WinRM 2.0, and BITS 4.0. The update can be installed on the following operating systems:

 Windows Server 2008 with Service Pack 1

 Windows Server 2008 with Service Pack 2

 Windows Server 2003 with Service Pack 2

 Windows Vista with Service Pack 2

 Windows Vista with Service Pack 1

 Windows XP with Service Pack 3

 Windows Embedded POSReady 2009

 Windows Embedded for Point of Service 1.1

In addition to the Windows Management Framework package, the .NET framework 3.5 SP1 is also required on the system to install PowerShell v2.0.

Although PowerShell v1 is available, there are many new features of PowerShell v2.0 that should be considered. PowerShell v1 is available for the following systems:

 Windows Server 2003 with Service Pack 2

 Windows XP with Service Pack 3

PowerShell v1.0 is installed by default, on Windows Vista and as a feature for Windows Server 2008. The requirements for PowerShell v1.0, are that the .NET framework 2.0 is installed on the system. At this stage, it is not recommended that PowerShell v1 be installed, as v2 has many additional features available.

By default, all versions of PowerShell will have the execution of scripts disabled. This has to be turned on either by the command set-execution policy or via group policy/registry settings. For PowerShell v2, PowerShell Remoting is also disabled by default. This has to be enabled with the command enable-psremoting or via group policy/registry settings.

Task 1: Determine the PowerShell Version

There are several ways you can determine the version of PowerShell you are currently running, or is available on a machine. We will look at several of these and a few things of note.

(22)

Use of $host.version

1. In the PowerShell console, type the following command to display the version: $host.version

This will now display the version number of Windows PowerShell. The number to take the most note of is the major version number.

Use of $psversiontable

1. In the PowerShell console, type the following command to view the ps version table: $psversiontable

This table of version numbers not only gives you the version of PowerShell installed but also lists the version of other related components. This is useful when you start looking at some of the advanced features of PowerShell such as remoting. The number to take interested in here is the PSVersion number.

Use of Registry

You can also check the version of PowerShell installed on a machine by checking the registry. This can be very useful, as it will allow us to check the version of PowerShell installed on a remote machine without having to run commands in a PowerShell console.

1. In the PowerShell console, type the following command to get the version information from the registry:

get-itemproperty HKLM:\software\microsoft\PowerShell\1\PowerShellEngine

You will now see the information from the registry key. The properties to take note of are the runtimeversion and the powershellversion number.

You can use the same path on a remote machine to check the PowerShell version installed on the target. This will be discussed later.

Use of PSSnapins

By looking at the versions of the PowerShell snapins you can determine the version of PowerShell and see the versions of each snapin that makes up the collections of PowerShell Cmdlets.

1. In the PowerShell console, type the following command to list the PowerShell snap-ins: get-pssnapin

You will now see the current PowerShell snapins and their PowerShell version numbers.

Points to Note About PowerShell v2.0

There are a few things to take note of when looking at PowerShell and its version. Several things such are registry paths, file extensions and install locations did not change between PowerShell v1 and PowerShell v2. These can cause confusion about the version of PowerShell that is in use. First to note is that the file extension .PS1 is still the script file extension for PowerShell v2.

(23)

The next is the PowerShell install location.

1. In the PowerShell console, type the following to set the location to the PowerShell install location:

$pshome

This variable contains the path to the PowerShell install location. Note that even on a machine with PowerShell v2 installed, this still points

to %systemroot%\ System32\WindowsPowerShell\v1.0.

(24)

Exercise 4: Basic PowerShell Commands

In this exercise, you will run some basic PowerShell commands. PowerShell allows you to run both PowerShell commands, many of these called Cmdlets, and external commands such as executable. First, you need to create a transcript to record all the commands you type. This will log all commands and the output they produce.

1. In the PowerShell console, type following command to start a transcript start-transcript PowerShell_transcript.txt

This will now start the transcript recording our commands.

You will get a quick list of the commands available to run in PowerShell. To do this, use the Cmdlet called get-command.

Transcript commands will not work if you are running the demos from within the ISE

2. In the PowerShell console, type the following command to list the commands available. get-command

A list of commands available to you under the current PowerShell console appears. However, you will notice that this list contains different types of commands. For now, you need only Cmdlets. Use get-command to display only the Cmdlets.

3. In the PowerShell console, type the following command to list Cmdlets: get-command –commandtype cmdlet

This will now list just the Cmdlets. You will notice it is a much shorter list than before. In fact you can use PowerShell to tell exactly how many Cmdlets there are. You can do this easily using two different methods.

4. In the PowerShell console, type the following command to count the Cmdlets available: get-command –commandtype cmdlet | measure-object

The count of available Cmdlets appears. By default, in Windows 7 the count should be 236 at the time of writing. There is another way to do this.

5. In the PowerShell console, type the following command to count the Cmdlets available: (get-command –commandtype cmdlet).count

The number of Cmdlets appears. However, this time you will see only the number. Now let us run some more commands.

1. In the PowerShell console, type the following command to get the current date: get-date

The current date and time appears. You can change what appears by using some parameters in the command.

(25)

2. In the PowerShell console, type the following command to get just the date: get-date –displayhint date

Only the date appears.

3. In the PowerShell console, type the following command to get only the current time: get-date –displayhint time

Only the time appears.

You can also view different time formats.

1. In the PowerShell console, type the following to display the short date format: get-date –displayhint time –format d

2. In the PowerShell console, type the following command to display the long date format: get-date –displayhint time –format D

3. In the PowerShell console, type the following to display the short time format: get-date –displayhint time –format t

4. In the PowerShell console, type the following command to display the long time format: get-date –displayhint time –format T

5. In the PowerShell console, type the following to display the date in a given format: get-date –displayhint time –format yyyy/MM/dd

This will display the date in the given format. Note that this is case sensitive. Note also that you should always use ISO8601 for dates rather than a specific locale.

6. In the PowerShell console, type the following command to display time in a given format:

get-date –displayhint time –format hh:mm:ss

This will display the time in the given format. Again, note that this is case sensitive and the lower-case ‘mm’ produces minutes, whereas the upper-case ‘MM’ produces the month.

Let us look at something more interesting.

1. In the PowerShell console, type the following command to list the current processes: get-process

A list of the currently running processes appears. We can do the same with services. 2. In the PowerShell console, type the following command to list the services on the system:

get-service

A list of services and their statuses appears. However, you might be interested in only one service. You can view this by typing its name after get-service.

(26)

3. In the PowerShell console, type the following command to get information for just the bits service:

get-service bits

Now you will see information about only the bits service

4. In the PowerShell console, type the following command to generate a random number between 1 and 10:

(27)

Exercise 5: Running External Commands

The great thing about PowerShell is that you do not have to call the external command with anything special to get them to run. You can run the command by typing the name of the command and pressing Enter.

1. In the PowerShell console, type the following command to get IP configuration information:

ipconfig

You will now see that you have the same output that you would have had if you run the command in the CMD shell.

2. In the PowerShell console, type the following command to get all IP configuration information:

ipconfig /all

You will again see the same output as the CMDshell.

3. In the PowerShell console, type the following command to get system information: systeminfo

This will now list a summary of the system information of the current machine.

What may be useful is to write this information to a file. Just like the CMD shell, you can use the > and >> symbols to redirect the output. > will overwrite the output, whereas >> will append the output.

4. In the PowerShell console, type the following command to redirect output to a file: systeminfo >systeminfo.txt

This will now write that information to a text file for us. To view it lets use notepad 5. In the PowerShell console, type the following command to open the text file in notepad:

notepad systeminfo.txt

You will now see the information from the command in the text file. This not only works for external commands, but also for Cmdlets.

6. In the PowerShell console, type the following command to redirect the Cmdlet output to a file:

get-service > services.txt

7. In the PowerShell console, type the following command to read the file: notepad services.txt

The information about services appears.

You can also get PowerShell to run multiple commands in a sequence. This can be useful as you can put multiple commands in one line and PowerShell will run these in a sequence. This

(28)

is especially useful if you have a command that takes a while to run and you do not want to wait until it is finished. To do this, use the semicolon character. This is the statement terminator for PowerShell.

1. In the PowerShell console, type the following command to run multiple commands, add multiple items to a text file and open it in Notepad:

ipconfig /all > systemconfig.txt; systeminfo >>systemconfig.txt ; get-service >>systemconfig.txt; notepad systemconfig.txt

The three commands to get information about the system will now run, and each of these will put information into the systemconfig.txt. Finally, open Notepad to view this information.

The $lastexitcode variable can be very useful when working with external commands. This variable contains the exit code or errorlevel value from the external command. In general, an exit code of zero is a success and anything non-zero is considered an error of some type. However, this may not be true depending on the program you are running. Let us look at a simple example using the ping command.

1. In the PowerShell console, type the following command to ping the local machine: ping localhost

2. In the PowerShell console, type the following command to check the status of the previous command:

$lastexitcode

You will now see that the value of the $lastexitcode is now zero. This is because we were able to ping the localhost.

3. In the PowerShell console, type the following command to ping a non-existing host: ping fakeserver

4. In the PowerShell console, type the following command to check the status of the previous command:

$lastexitcode

You will now see that the value of the $lastexitcode is now one. This is because, you were unable to ping the fakeserver host, as it does not exist.

(29)

Exercise 6: List PowerShell Commands

You looked at listing available PowerShell commands quickly a little while ago. But it is worth spending a little more time on this as it is difficult to remember around 236 or more commands. There will be a number of Cmdlets that you will use repeatedly, and some you may never use. To help you find Cmdlets in PowerShell we have the get-command Cmdlet. This can be used in a number of ways to find the commands that you are interested in. 1. In the PowerShell console, type the following command to list the commands available:

get-command

You will now see a list of Cmdlets, functions and alias. This does work a little differently in PowerShell v1 and v2. In v1 you would have only seen Cmdlets by default.

2. In the PowerShell console, type the following command to list just Cmdlets: get-command –commandtype cmdlet

You will now see a list of just the Cmdlets available. Now, let us look for commands that start with get.

3. In the PowerShell console, type the following command to list all the command that start with get:

get-command get*

A list of commands that start with get appears. You will notice that most of these are Cmdlets. However, there are some external commands such as getmac.exe and

gettingstarted.exe listed. This is because, these are commands that PowerShell can run. You will notice that these external commands are listed as the type of application. This tells you that it is an external command. If you combine the last two options,

-commandtype and get* you will see only the Cmdlets.

4. In the PowerShell console, type the following command to list just Cmdlets that start with get:

get-command –commandtype cmdlet get*

Now, you will see just Cmdlets that start with get. There is an easier way to do this. You can use the -verb option to look for Cmdlets or functions.

5. In the PowerShell console, type the following command to list Cmdlets with the verb get: get-command –verb get

You will now see any Cmdlets and functions that have the verb get in their name. We will go into more details about the naming of Cmdlets later, but you will find that the names of the Cmdlets follow verb-noun in their names. This makes it easy to know what a Cmdlet might do, but also makes is easy to find the Cmdlets.

(30)

6. In the PowerShell console, type the following command to list Cmdlets with the noun service:

get-command –noun service

7. You will now see all the Cmdlets that are related to services. We can also do this with a wildcard search.

8. In the PowerShell console, type the following command to get all commands that end with service:

(31)

Exercise 7: Getting Help with PowerShell

One of the useful things with PowerShell is that it has a great built-in help system. All

Cmdlets have a help topic and these topics have both, a consistent format and a consistent method for accessing it. This is all done with the Cmdlet get-help. In addition, to having help information for Cmdlets, there are also additional help topics covering PowerShell concepts,

1. In the PowerShell console, type the following command to display the help details: get-help

The help information for the get-help Cmdlet appears. You will notice that information follows a particular format. The good thing is that this format is the same for all Cmdlets. 2. In the PowerShell console, type the following command to get help on the get-command

Cmdlet:

get-help get-command

The help information for the get-command Cmdlet appears. You can expand on this by using two options.

3. In the PowerShell console, type the following command to get a detailed help on get-command:

get-help get-command –detailed

Some of the same information as before appears on top of the display. However, as you scroll down you will find more information such as the parameter descriptions and some examples. Let us do this again with a different Cmdlet.

4. In the PowerShell console, type the following to get detailed help on get-service Cmdlet: get-help get-service –detailed

The detailed help information for the get-service Cmdlet appears. There is another option that is useful, the –full option. This will display all the help information for the Cmdlet. 5. In the PowerShell console, type the following to get all help on get-service Cmdlet:

get-help get-service –full

The full help information for that Cmdlet appears.

Another option that can be a great way to jog your memory about how a Cmdlet works is the –examples option. This will display some examples of how to use the Cmdlet.

6. In the PowerShell console, type the following command to get just examples of the get-service Cmdlet:

get-help get-service –examples

In addition to getting help on Cmdlets, there are many other help topics available. To see them we will use the following command.

(32)

7. In the PowerShell console, type the following command to list all help topics: get-help *

The full list of help topics available appears. You will see the alias, the functions,

Cmdlets and finally the helpfile topics. You will notice that all the helpfile topics all have the name about_ this allows us to look just at them.

8. In the PowerShell console, type the following command to list just the about topics: get-help about

Only the information about helpfile topics appears.

9. In the PowerShell console, type the following command to display the wildcards help topic:

get-help about_wildcards

The information about PowerShell wildcards appears. Note that there is no –full or –

(33)

Exercise 8: Explore Command History

One of the things that can help a lot in the early stages of learning PowerShell is to look at the history of the commands that you have run. This can be done in a few different methods, but we will look at the two main methods.

The first is using the get-history Cmdlet to display the previous commands run.

1. In the PowerShell console, type the following command to view the command history: get-history

The previous commands run up to a default maximum of 64 commands. You will notice that each command has an ID associated with it. This ID can be used to re-run a

particular command.

2. In the list of commands, locate the ID for the get-help and get-service commands. 3. In the PowerShell console, type the following command to invoke the command from

history:

invoke-history –id <that ID from above>

The command executes again. This can be useful when you have complicated lines of code and you do not want to use the up arrow to go through all commands again. The previous commands can also be exported and later imported to use again.

1. In the PowerShell console, type the following command to export the history to a csv file: get-history | export-csv myhistory.csv

The command history is exported to a CSV file.

2. Open a new PowerShell console and type the following command to view the current history:

get-history

As this is a new PowerShell session, you will see that there currently are no commands in the history. You can now import the commands from the CSV file we created to include some history commands that can be invoked.

3. In the new PowerShell console, type the following command to import the history from the other session:

import-csv myhistory.csv | add-history

4. In the new PowerShell console, type the following command to view the current history: get-history

You will now see that there are commands loaded into the history and can be invoked. Notice that the IDs will not be the same as the session that we exported the information from.

(34)

One thing to note is that by default, you will only see the last 64 commands. This number is defined by the variable $MaximumHistoryCount.

To increase the maximum commands:

1. In the original PowerShell console, type the following command to increase the maximum command history count:

$MaximumHistoryCount = 100

This will allow you to look at up to 100 previous commands. You can also specify –

count 100 for get history to display the 100 commands. By default, you will only get 32

displayed.

2. In the PowerShell console, type the following command to get the last 100 commands: get-history –count 100

There is another way of viewing the previous commands run. However, this will also show the output produced from each of these.

If you remember, earlier in the lesson, we created a transcript. This will have recorded all the previous commands that we have run. So let us stop and view the contents of that transcript. 1. In the PowerShell console, type the following command to stop the transcript:

Stop-Transcript

This will stop recording of the session and tell you where the output file is.

Again, remember here (and moving forward through the additional demonstrations) that transcript commands will fail if being run through the ISE.

2. In the PowerShell console, type the following to read the transcript: notepad <your transcript file>

By reading the file, you will see the history of all the commands you have run. This file should be kept for later use, as it can be useful to look at the commands you have run. It is suggested that at least for the next few lessons, start a transcript for each lesson so that you can review those later.

In addition to the history Cmdlets, you can also use the up arrow to see the previous

commands run. To run the same command again, press Enter. You can also use the up arrow to bring up a previous command and modify it. The drawback here is that if you need to go back several commands, or you need to re-run multiple commands, the order of these commands will change each time a new command is executed.

(35)

Lesson 1 Hands-On : Introduction

Objectives

The objectives for this lab are:

 To create transcripts of PowerShell commands

 To practice using the top 3 Cmdlets (i.e. get-help, get-command and get-member)

 To execute multiple commands in a single line

Prerequisites

The lab requires a Windows 7 client running in a domain environment.

Estimated time to complete this lab

(36)

Exercise 1: Create a Transcript of Commands

Objectives

In this exercise, you will:

 Practice creating transcripts of PowerShell commands

Task 1: Log on to the VM environment

1. Log on to Windows 7 Enterprise client as Contoso\Administrator with the password,

P@ssword

Task 2: Open Windows PowerShell Session

On the Windows taskbar, click .

The PowerShell window appears.

Task 3: Record commands in a text file

1. Type the following in the PowerShell console. This will NOT work in the PowerShell ISE as transcripts are not supported under the ISE Host.

new-item -path $home\documents -name transcripts -type directory This will create a new directory for storing transcript files.

2. Type the following to set the transcript variable to a desired location for storing transcript files

$global:transcript=”$home\documents\transcripts\$((get-date).tostring("yyyyMMddHHmmss")).txt”

Note: This global variable will be lost when the PowerShell session is terminated. The

variable assignment can be added to a Profile if it is required to persist between sessions.

Note also that you should always use ISO8601 for dates rather than a specific locale as shown in tostring("yyyyMMddHHmmss")) above.

3. Type the following to start the recording part of this PowerShell session in a text file. start-transcript.

4. Enter some commands, for example: Get-command

Get-service Get-process Get-help

(37)

stop-transcript

Note that the file path and name appears on the console. 6. Type the following to view the transcript file name.

notepad $transcript

7. Type the following to start recording again. start-transcript

8. Enter some commands, for example: Get-command -commandtype Cmdlet

9. Type the following to stop recording this PowerShell session. stop-transcript

Note that the file path and name appears on the console. 10. Type the following to view the transcript file name.

notepad $transcript

Note that the same file is used and the previous content was overwritten. 11. Type the following to start recording again

start-transcript -append

12. Enter some commands, for example: Get-command -commandtype alias

13. Type the following to stop recording this PowerShell session. stop-transcript

Note that the file path and name appears on the console. 14. Type the following to view the transcript file name.

notepad $transcript

(38)

Exercise 2: Using the Most Common Commands

Objectives

In this exercise, you will:

 Practice using the most common and useful PowerShell commands

Task 1: Log on to the VM environment

1. Log on to Windows 7 Enterprise client as Contoso\Administrator with the password,

P@ssword

Task 2: Open Windows PowerShell Session

On the Windows taskbar, click .

The PowerShell window opens.

Task 3: Get-Help, Get-Command and Get-Member

1. Type the following to view the full help available on using the get-help Cmdlet.

2. get-help get-help -full Type the following to view help for the get-command Cmdlet. get-help get-command

3. Type the following to view help for the get-member Cmdlet.

get-help get-member

4. Type the following to return the methods and properties that are available for the output of the (get-help get-command) command.

(get-help get-command) | get-member

5. Type the following to return only the properties that are available for the output of the (get-help get-command) command.

(get-help get-command) | get-member -membertype noteproperty

6. Type the following to return only the methods that are available for the output of the (get-help get-command) command.

(get-help get-command) | get-member -membertype method 7. Type the following to display the command syntax only. (get-help get-command).syntax

8. Type the following to display all the parameters of the command. (get-help get-command).parameters

9. Type the following to view the static members of the datetime type. [datetime] | get-member -static

(39)

A. Type the following to view the current date and time. [datetime]::now

(40)

Exercise 3: Run Multiple Commands

Objectives

In this exercise, you will:

 Explore running multiple PowerShell commands in a single line

Task 1: Log on to the VM environment

1. Log on to Windows 7 Enterprise client as Contoso\Administrator with the password,

P@ssword

Task 2: Open Windows PowerShell Session

On the Windows taskbar, click .

The PowerShell window opens.

Task 3: Multiple Commands

1. Type the following series of commands on a single line write-output. The text is wrapped here due to the page width.

Write-Output “Asset Information`n” |

out-file $home\documents\assetinfo.txt; get-date |

out-file $home\documents\assetinfo.txt -append; $Env:COMPUTERNAME | out-file $home\documents\assetinfo.txt -append; get-service | out-file $home\documents\assetinfo.txt –append

2. Type the following command to view the asset information. notepad "$home\documents\assetinfo.txt"

(41)

PowerShell for the IT

Administrator, Part 1

Lesson 2: PowerShell Commands

Student Lab Manual

(42)

Lesson 2 Demonstration : Commands and objects

Introduction

This lab introduces PowerShell commands, known as cmdlets. You will learn about cmdlet usage, discovery and syntax for a complete understanding of their importance. You will also understand the concept of objects, which is fundamental to using PowerShell effectively.

Objectives

After completing this lab, you will be able to:

 Explore command discovery, syntax and usage

 Leverage command help topics

 Discover & create command aliases

 Explain the usage of classes, objects & various object models in PowerShell

Pre-requisites

To complete this lab, you need:

 A Windows 7 workstation logged onto with administrator credentials

Estimated time to complete this lab

(43)

Exercise 1: PowerShell Commands

Objectives

In this exercise, you will:

 Learn command syntax

 Learn command usage

 Find command help

 Discover commands and their grouping

Scenario

PowerShell consists of four types of commands:

 Cmdlets

 Functions

 Scripts

 External commands

In this exercise, we will focus on using the first type of commands, known as Cmdlets (pronounced ‘command-lets’).

Cmdlets are commands ‘built-in’ to PowerShell. They are written in a .NET language (C#, VB.NET, F#, etc.) and compiled into a dynamic link library (.DLL) file.

236 Cmdlets are available by default in PowerShell v2.0 and cover a wide range of uses, from interacting with the file system to listing event log and service information.

Although out-of-scope for this lesson, it is worth noting that new Cmdlets authored and compiled by a developer can be loaded into the PowerShell process, alongside the default Cmdlets.

Task 1: Understand the Command Syntax

Commands have a verb-noun naming convention, where the verb describes the action to take on the noun. Nouns are always named in a singular way (Process rather than Processes). It is also worth noting that PowerShell is not case sensitive.

Command names are followed by a number of hyphen-prefixed parameter names which may be paired with an argument and are known as named parameters. All parameters and their arguments are separated by one or more space characters. Parameter arguments can also be inferred by their position in the command without specifying the parameter name. These are known as positional arguments.

(44)

Name Switch Parameter Parameter with argument Positional argument

Verb-Noun –parameter1 –parameter2 <argument2> <argument3> 1. Open the PowerShell console or ISE and type the following command:

Get-Process

This command will return a list of all processes running on the local machine. 2. To limit the number of processes returned, add a parameter and an argument. The

following example uses the Get-Process Cmdlet’s –Name parameter. Get-Process -Name explorer

This will return a single line of information about the “explorer” process running on the local machine.

3. Parameter names can also be shortened by abbreviating them to a unique value. Get-Process -Na explorer

4. Next, try typing the same command using PowerShell’s tab-completion feature. Type the following:

Get-

Then, press the Tab key until the full command name appears. Pressing SHIFT+TAB moves backwards through the list.

5. This feature also works with parameter names. Type a space character and a hyphen character. Pressing the Tab key will cycle through all the parameters for a particular command. Again, pressing Shift+Tab moves backwards through the list.

Get-Process -<press tab key>

6. Certain parameter names can be omitted entirely with the command still working as expected. Below, the argument explorer is associated with the –Name parameter by its position in the command. Remember that the arguments have to be passed in the default order specified by the Cmdlet.

Get-Process explorer

7. Many parameters also accept a list of arguments, allowing more than one value to be bound to a parameter. In PowerShell, lists can be specified by separating each item with a comma.

Get-Process –Name explorer,system,wmiprvse

8. Now add a parameter that does not require an argument. Such parameters are called

switch parameters, since they change the command's behavior by enabling a feature

(45)

For example, the module switch parameter of the Get-Process Cmdlet turns on a feature that lists all the .dll files loaded by the returned process.

Get-Process -Name explorer -Module

9. If you omit any required parameters, PowerShell will prompt you to supply the required arguments automatically. In the example below, you are prompted for the Path and

-Type parameter arguments to successfully create a new folder on the local C: volume.

PS C:\Users\Administrator> New-Item

cmdlet New-Item at command pipeline position 1 Supply values for the following parameters: Path[0]: c:\test

Path[1]:

Type: directory Directory: C:\

Mode LastWriteTime Length Name ---- --- --- ---- d---- 11/08/2011 10:00 PM test

Task 2: Search for Commands (Get-Command)

In this task, you will understand how to search for Cmdlets. To do this, use a Cmdlet

designed specifically for this purpose. The Get-Command Cmdlet returns a list of commands. 1. Open the PowerShell console or ISE.

2. Type the following command and press Enter: Get-Command

A list of Cmdlets, Functions and Aliases will be displayed, since all command types are listed by default.

3. If you were searching for a command containing a particular string you can enclose it in wildcard (*) characters.

Get-Command *item*

4. Get-Command also has –verb and –noun parameters which allow you to limit the search to commands matching the verb and/or noun part of the name. Below we list all the Cmdlets where the word on the left-hand side of the hyphen, the verb, matches the string “get”.

Get-Command –verb get

Wildcard characters can also be used in parameter arguments.

5. List all the commands where the noun part of the name starts with the string ‘object’. Get-Command –noun object

(46)

6. List all commands where the verb part of the name ends with the letter ‘w’. Get-Command –verb *w

Task 3: Get Command Help (Get-Help)

PowerShell has an extensive help system accessible through the Get-Help Cmdlet. The Cmdlet can return the syntax, description, parameters and examples for any command. 1. To use this Cmdlet, type the name of the command you want help for as the first

argument.

Get-Help New-Item

This use of the command displays basic help information. Get-Help also has a number of switch parameters that control the amount of help information returned. The -full

parameter returns all information about a particular command. Get-Help Get-Service -full

The -examples parameter lists different ways in which a command can be used. Get-Help New-Item -examples

The -detailed parameter adds examples and descriptions to the basic help. Get-Help New-Item -detailed

As with all commands, wildcard characters can be used to return help for multiple

matches. If only one command matches, PowerShell returns the help for that command. If not, a list of matching help topics is displayed.

Get-Help new*

Another useful switch parameter for this Cmdlet is -Online. If you have internet access, this parameter will open the TechNet Windows PowerShell command Help Topics documentation for the specified command.

http://technet.microsoft.com/en-us/library/dd347701.aspx. Get-Help New-Item -Online

2. Get-Help can also be used to display conceptual help about the PowerShell Language. This is accessed by using the argument about_*, which will list all of the conceptual help topics.

Get-Help about_*

You can then choose the topic and use its full name to list the entire help file. Get-Help about_Command_Syntax

(47)

Note: A very useful piece of information returned by all the Get-Help switch parameters

is the command syntax. This has a special format that is easy to understand, once you know how to interpret it!

<cmdlet name> -<Required Parameter name> <Required parameter Value> [-<Optional Parameter name> <Optional Parameter Value>] [-<Optional Switch Parameter>]

(48)

Exercise 2: Command Aliases

In the previous exercise, the full verb-noun name was used when calling commands. Using aliases, PowerShell provides the ability to create alternate names for any command.

Note: Aliases execute the underlying command using a different name.

There are two types of built-in aliases: Transitional and Convenience.

Transitional aliases: Transitional aliases were created to assist users migrating from

cmd.exe or UNIX/Linux shells to PowerShell. For example, the cmd.exe dir command lists files and folders in the current directory. In UNIX/Linux shells, the same operation is achieved using the ls command. PowerShell implements two transitional aliases for its equivalent directory listing Cmdlet, Get-ChildItem. The following commands both execute

Get-ChildItem.

dir ls

Convenience aliases: Convenience aliases are, as the name suggests, for convenience. For

example, Get-ChildItem has a convenience alias of gci, which saves the time required to type the complete command name.

gci

Note: By default, PowerShell 2.0 has 137 aliases. The majority can be re-assigned to

point to a different command or deleted entirely, although they will be re-populated when a new console or ISE session is established.

Task 1: Find Different Alias Commands

1. Find all the ‘*-Alias’ commands using either of the methods below: Get-Command –Name *alias

Get-Command –Noun alias

You will see five Cmdlets that can be used to manipulate aliases. The most useful of which are Get-Alias, New-Alias and Set-Alias.

a. The Get-Alias Cmdlet is used to list all aliases. Get-Alias

b. New-Alias allows you to create new aliases for a Cmdlet, Function or executable file. The -Name parameter argument specifies the name of the new alias and the -Value parameter specifies the command to alias.

(49)

c. The Set-Alias Cmdlet can point an existing alias to a different command. Set-Alias –Name gp –Value Get-PSProvider

(50)

Exercise 3: The Object-based Shell

Traditionally, the Windows command console and UNIX shells process data in the form of strings. While this is a common way to represent data, it is not easy to extract and manipulate the data. Character sequences need to be found using regular expressions or line/column numbers and converted into the required string format for another command to process. In contrast, PowerShell is an object-based shell built on the .NET framework. Objects are a mechanism to store and manipulate data in a structured way. Data does not have to be extracted from strings and can be accessed using a simple naming convention.

Note: PowerShell’s language is based on a POSIX standard shell (IEEE Spec.

1003.2), which itself is based on the UNIX Bourne Shell (Windows PowerShell in Action – Second Edition, Manning Press 2011 by Bruce Payette).

What is an Object?

Objects are all around us. A car is an object with a collection of separate parts, such as a steering wheel, accelerator pedal and brakes. To drive the car, we can use the parts to steer, accelerate and slow/stop the vehicle. We can now divide the car (object) into two distinct concepts.

 A collection of parts

 Uses of the parts to change the car’s behavior

Now, apply this object model to the Windows Operating System.

A Windows Service object has a collection of parts called Properties. Properties represent the state of a service, such as the service name and status. The service status can be changed by using object Methods. Object Methods allow you to start or stop a service. Collectively, properties and methods are called object Members.

Members

Properties Methods

Service Name Start() Status Stop()

Note: Method names can be easily distinguished from property names as they are

(51)

Task 1: List Object Information (Get-Member Cmdlet)

The .NET object framework is self-descriptive. All objects hold information that describes their structure. You can interrogate any .NET object and list its properties and methods within PowerShell without needing to refer to the online MSDN Class Library.

You can achieve this by passing the object through the pipeline, to the Get-Member Cmdlet. Pipeline operations will be covered in detail in another lesson.

1. Get a list of process objects using the Service Cmdlet and pipe them to the

Get-Member Cmdlet.

This will list the members (properties & methods) of this type of object. Get-Service | Get-Member

2. Alternatively, you can choose not to use the pipeline and employ the Get-Member Cmdlet’s InputObject parameter. This command however lists the members of the collectin of pipeline data as a whole, rather than the individual items in the collection. Get-Member –InputObject (Get-Service)

The top of the output lists the type name of the object(s). In the first case when piping to Ger-Member, you can see it is a System.ServiceProcess.ServiceController type of object. TypeName: System.ServiceProcess.ServiceController

The next piece of information displayed is the collection of members (properties and methods). The output below displays three columns of member information: the name, membertype and definition.

Name MemberType Definition ---- --- ---

Name AliasProperty Name = ServiceName

RequiredServices AliasProperty RequiredServices = ServicesDependedOn Disposed Event System.EventHandler Disposed(System.Object, Close Method System.Void Close()

Continue Method System.Void Continue()

CreateObjRef Method System.Runtime.Remoting.ObjRef Dispose Method System.Void Dispose()

Equals Method bool Equals(System.Object obj)

ExecuteCommand Method System.Void ExecuteCommand(int command) GetHashCode Method int GetHashCode()

GetLifetimeService Method System.Object GetLifetimeService() GetType Method type GetType()

InitializeLifetimeService Method System.Object InitializeLifetimeService() Pause Method System.Void Pause()

Refresh Method System.Void Refresh()

Start Method System.Void Start(), System.Void Stop Method System.Void Stop()

ToString Method string ToString() WaitForStatus Method System.Void

CanPauseAndContinue Property System.Boolean CanPauseAndContinue {get;} CanShutdown Property System.Boolean CanShutdown {get;}

CanStop Property System.Boolean CanStop {get;}

(52)

DependentServices Property System.ServiceProcess.ServiceController[] DisplayName Property System.String DisplayName {get;set;} MachineName Property System.String MachineName {get;set;} ServiceHandle Property System.Runtime.InteropServices.SafeHandle ServiceName Property System.String ServiceName {get;set;} ServicesDependedOn Property System.ServiceProcess.ServiceController[] ServiceType Property System.ServiceProcess.ServiceType

Site Property System.ComponentModel.ISite Site Status Property

3. The PowerShell code below returns the number of members that a

System.ServiceProcess.ServiceController object contains.

Note: Pipeline operations will be covered in more detail in the next lesson).

You can see that there are 32 members of a System.ServiceProcess.ServiceController object.

Get-Service | Get-Member | Measure-Object -Property MemberType Count : 32 Average : Sum : Maximum : Minimum : Property : MemberType

4. It is possible to shorten the output from this Cmdlet by listing only the properties. Get-Service | Get-Member –MemberType property

5. It is also possible to shorten the output by listing only the methods. Get-Service | Get-Member –MemberType method

6. Now that you have uncovered the object’s members, you can use them to access state information using properties and manipulate the object using methods.

Task 2: Access Object Members

To access information stored in object properties or execute object methods, the dot (.) character is used to separate the object name from the member name. This is referred to as

dot-notation.

1. Select a single service object by filtering the output of the Get-Service Cmdlet using the

Name parameter and assign it to a variable.

$ALGService = Get-Service –Name alg

2. Type the variable name to confirm that you have referenced the correct service. By default, three properties of the service object are displayed: Status, Name and DisplayName.

(53)

$ALGService

Status Name DisplayName --- ---- ---

Running ALG Application Layer Gateway Service

3. Type a dot (.) character directly after the variable name and repeatedly press the Tab key. The member names for this object type will be displayed one after the other.

4. Press Enter to display the information stored in one of the properties. $ALGService.DisplayName

Application Layer Gateway Service

5. Type the variable name again, followed by a dot, and type Start(). Press Enter.

Note: Be sure to append smooth brackets ‘()’ after the method name.

$ALGService.Start()

6. Type the variable name to view the service status.

Note that the status is still stopped. This is because the state of the service was saved at the instant you assigned it to a variable in step 1. Following the assignment, the state has not been updated.

7. To update the status property, execute the object’s Refresh() method. $ALGService.Refresh()

8. The status property should now display Running. $ALGService

Status Name DisplayName --- ---- ---

Running ALG Application Layer Gateway Service

9. Let’s see another example of accessing object members. Assign a string to a variable and pass it through the pipeline to Get-Member to discover the string object’s members. Alternatively, you can use the alias for Get-Member (gm).

$strMyName = “My name is Chris” $strMyName | Get-Member

10. You can also just pipe the string directly to the Get-Member Cmdlet. Both commands in steps 8 and 9 produce the same output.

“My name is Chris” | Get-Member

11. The object type name returned is System.String. This type has 2 properties and 32 methods. The length property stores the number of characters in the string. In this case, the string consists of 16 characters.

$strMyName.length 16

References

Related documents