Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Save more on your purchases! discount-offer-chevron-icon
Savings automatically calculated. No voucher code required.
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Free Learning
Arrow right icon
Mastering Windows PowerShell Scripting
Mastering Windows PowerShell Scripting

Mastering Windows PowerShell Scripting: Master the art of automating and managing your Windows environment using PowerShell

eBook
$9.99 $43.99
Paperback
$54.99
Subscription
Free Trial
Renews at $19.99p/m

What do you get with eBook?

Product feature icon Instant access to your Digital eBook purchase
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
OR
Modal Close icon
Payment Processing...
tick Completed

Billing Address

Table of content icon View table of contents Preview book icon Preview Book

Mastering Windows PowerShell Scripting

Chapter 1. Variables, Arrays, and Hashes

PowerShell provides a variety of mechanisms to store, retrieve, and manipulate data used in your scripts. These storage "containers" are referred to as variables, arrays, and hashes. They can be used as containers to store strings, integers, or objects. These containers are dynamic as they automatically detect what type of data is being placed within them. Unlike other object-oriented languages, there is no need to declare the container prior to use. To declare one of these containers, you use the dollar sign ($) and the container name.

An example of a container would look like this:

$myVariable

During this chapter, you will learn the following concepts:

  • Variables
  • Arrays
  • Hashes
  • Deciding the best container for your scripts

When you are creating names for containers, it is industry best practice to use names that are representative of the data they are storing. While containers are not case sensitive in PowerShell, it is a common practice to use camelCase when writing container names. camelCase is achieved by keeping the first letter of the container lowercase and the subsequent first letters of each word capitalized. Some variations of camelCase permit the first letter to be capitalized. This formatting aids in easy reading of the containers.

An example of a container using camelCase would look like this:

$webServerIPAddress

Variables

Variables are one of the most widely used containers in PowerShell due to their flexibility. A variable is a container that is used to store a single value or an object. Variables can contain a variety of data types including text (string), numbers (integers), or an object.

If you want to store a string, do the following:

$myString = "My String Has Multiple Words"
$myString 

The output of this is shown in the following screenshot:

Variables

The preceding variable will now contain the words My String Has Multiple Words. When you output the $myString variable, as shown in the preceding screenshot, you will see that the string doesn't contain the quotations. This is because the quotations tell the PowerShell command-line interpreter to store the value that is between the two positions or quotations.

Tip

You are able to reuse variables without deleting the content already inside the variable. The PowerShell interpreter will automatically overwrite the data for you.

Subsequently, if you want to store a number, do the following:

$myNumber = 1
$myNumber

The output of this is shown in the following screenshot:

Variables

This method differentiates while storing a string as you do not use quotations. This will tell the PowerShell interpreter to always interpret the value as a number. It is important to not use quotations while using a number, as you can have errors in your script if the PowerShell interpreter mistakes a number for a string.

An example of what happens when you use strings instead of integers can be seen here:

$a = "1"
$b = "2" 
$c = $a + $b
$c

The output of this is shown in the following screenshot:

Variables

The $c variable will contain the value of 12. This is due to PowerShell interpreting your $a string of 1 and $b string of 2 and putting the characters together to make 12.

The correct method to do the math would look like this:

$a = 1
$b = 2
$c = $a + $b
$c

The output of this is shown in the following screenshot:

Variables

Since the $a and $b variables are stored as numbers, PowerShell will perform the math on the numbers appropriately. The $c variable will contain the correct value of 3.

Objects stored in variables

Objects are vastly different than strings and numbers. Objects in PowerShell are data structures that contain different attributes such as properties and methods with which one can interact. Object properties are descriptors that typically contain data about that object or other related objects. Object methods are typically sections of code that allow you to interact with that object or other objects on a system. These objects can easily be placed in variables. You can simply place an object in a variable by declaring a variable and placing an object in it. To view all of the object's attributes, you can simply call the variable containing the object, use a pipe character |, and use the get-member cmdlet.

To place an object in a variable and retrieve its attributes, you need to do this:

$date = get-date
$date
$date | get-member

The output is shown in the following screenshot:

Objects stored in variables

In this example, you will learn how to place an object into a variable. You first start by declaring the $date variable and setting it equal to the output from the get-date cmdlet. When you execute this, the get-date cmdlet references the System.Date class, and the $date variable inherits all of that object's attributes. You then call the $date variable and you see that the output is the date and time from when that command was run. In this instance, it is displaying the DateTime ScriptProperty attribute on the screen. To view all of the attributes of the System.Date object in the $date variable, you pipe those results to the get-member cmdlet. You will see all of the attributes of that object displayed on the screen.

If you want to use the properties and method attributes of that object, you can simply call them using dot notation. This is done by calling the variable, followed by a period, and referencing the property or method.

To reference an object's properties and method attributes, you need to do this:

$date = get-date
$date.Year
$date.addyears("5")

The output of this is shown in the following screenshot:

Objects stored in variables

This example shows you how to reference an object's properties and method attributes using dot notation. You first start by declaring the $date variable and setting it equal to the output from the get-date cmdlet. When you execute this, the get-date cmdlet references the System.Date class, and the $date variable inherits all of that object's attributes. You then leverage dot notation to reference the Year property attribute by calling $date.Year. The attribute will return 2015 as the Year property. You then leverage dot notation to use the AddYears() method to increase the years by 5. After entering the $date.addyears("5") command, you will see an output on the screen of the same month, day, and time; however, the year is incremented by 5 years.

Arrays

Arrays are the second most used containers in PowerShell. An array, in simple terms, is a multi-dimensional variable or a variable containing more than one value. The two core components to an array are the index number and the position value. When you use an array, you reference an index number and it will return the position value.

Single-dimension arrays

The following table represents an array with a single dimension:

Index number

Position value

0

Example 1

1

Example 2

2

Example 3

3

Example 4

4

Example 5

When you are storing, manipulating, or reading the data in an array, you have to reference the position in the array the data is residing. The numbers populated in the table's Index number column are representative of the location within the array. You will see that array's numbering starts at the number 0, and so the first data would be in cell 0. If you call the array at position 0, the result would be the position value of Example 1. When building the array, you will see that each value in the array values is separated by a comma. This tells the PowerShell interpreter to set a new array value.

First, you can start by building the array in the preceding table by entering the following command:

$myArray = "Example 1", "Example 2", "Example 3", "Example 4", "Example 5"
$myArray

The output of this is shown in the following screenshot:

Single-dimension arrays

The preceding example displays how to create an array of strings. You first start by declaring a variable named $myArray. You then place multiple strings of text separated by commas to build the array. After declaring the array, you call the $myArray array to print the values to the console. It will return Example 1, Example 2, Example 3, Example 4, and Example 5.

Retrieving data at a specific position in an array is done through the use of brackets. To retrieve the value of 0 from the array, you would do the following:

$myArray = "Example 1", "Example 2", "Example 3", "Example 4", "Example 5"
$myArray[0]

The output of this is shown in the following screenshot:

Single-dimension arrays

The preceding example displays how you can obtain array data at a specific position. You first start by declaring a variable named $myArray. You then place multiple strings of text separated by commas to build the array. After declaring the array, you call $myArray[0] to access the position value of index number 0 from the array. The preceding example returns the value of Example 1 for the index number 0.

Jagged arrays

Arrays can become more complex as you start adding dimensions. The following table represents a jagged array or an array of arrays:

Index number

Position value 0

Position value 1

0

Example 1

Red

1

Example 2

Orange

2

Example 3

Yellow

3

Example 4

Green

4

Example 5

Blue

While accessing data in a jagged array, you will need to read the cell values counting at 0 for both dimensions. When you are accessing the data, you start reading from the index number first and then the position value. For example, the Example 1 data is in the index number of 0 and the position value of 0. This would be referenced as position [0][0]. Subsequently, the data Blue is in the index number of 4 and position value of 1. This would be referenced as position [4][1].

To do this for yourself, you can build the preceding table by entering the following command:

$myArray = ("Example 1","Red"), ("Example 2","Orange"), ("Example 3", "Yellow"), ("Example 4", "Green"), ("Example 5", "Blue")
$myArray[0][0]
$myArray[4][1]

The output is shown in the following screenshot:

Jagged arrays

This example displays how to create a jagged array and accessing values in the array. You first start building the jagged array by declaring the first array of "Example 1" "Red", second array of "Example 2" "Orange", third array of "Example 3" "Yellow", fourth array of "Example 4" "Green", and fifth array of "Example 5" "Blue". After building the array, you access the word Example 1 by referencing $myArray[0][0]. You then access the word Blue by referencing $myArray[4][1].

Updating array values

After you create an array, you may need to update the values inside the array itself. The process for updating values in an array is similar to retrieving data from the array. First you need to find the cell location that you want to update, and then you need to set that array location as equal to the new value:

Index number

Position value 0

Position value 1

0

John

Doe

1

Jane

Smith

Given the preceding table, if Jane's last name needed to be updated to display Doe instead of Smith, you would first need to locate that data record. That incorrect last name is located at index number 1 and position value 1, or [1][1]. You will then need to set that data location equal (=) to Doe.

To do this, you need to enter the following command:

$myArray = ("John","Doe"), ("Jane","Smith")
$myArray
$myArray[1][1] = "Doe"
$myArray

The output of this is shown in the following screenshot:

Updating array values

This example displays how you can create an array and update a value in the array. You first start by defining $myArray and use "John","Doe", "Jane", and "Smith" as the array values. After calling the variable to print the array to the screen, you update the value in index number 1, position value 1, or $myArray[1][1]. By setting this position equal to Doe, you change the value from Smith to Doe:

Index number

Position value 0

Position value 1

0

John

Doe

1

Jane

Smith

2

Sam

Smith

In instances where you want to append additional values to the array, you can call the array variable with the += command and the data you want to add to the array. This looks like $array += "New Array Values". The += command is a more efficient method of performing the commands $array = $array + "New Array Values".

To add data into an array and make the preceding table, you can do the following operation:

# Create the Array
$myArray = ("John","Doe"), ("Jane","Smith")
$myArray
# Append Data to the Array
$myArray += ("Sam","Smith")
$myArray

The output of this is shown in the following screenshot:

Updating array values

In this example, you add values to an existing array. You first start by defining an array of $myArray. You then print the existing contents of the array to the screen. You then add additional content by setting the array += to the new array data of ("Sam","Smith"). After reprinting the contents of the array to the screen, you see the values Sam and Smith added to the array.

Tip

To search and remove items from an array, you will need to create a ForEach loop to cycle through all of the index numbers and position values. Chapter 4, Functions, Switches, and Loop Structures, explores the ForEach looping structure.

Hashes

Hashes are used like arrays. The main difference is that they use the values as indexes versus sequentially numbered indexes. This provides easy functionality to add, remove, modify, and find data contained in the hash table. Hash tables are useful for static information that needs a direct correlation to other data:

Name

Value

John.Doe

Jdoe

Jane.Doe

jdoe1

A good example of a hash table would be in the instance of an Active Directory migration. In most Active Directory migrations, you would need to correlate old usernames to new usernames. The preceding table represents a username mapping table for these types of migrations. While a traditional array would work, a hash table makes this much easier to do.

To create the preceding hash table, enter the following command:

$users = @{"john.doe" = "jdoe"; "jane.doe" = "jdoe1"}
$users

The output of this is shown in the following screenshot:

Hashes

After you create the table, you may want to find a specific user. You can search a hash table by using the hash's indexing function. This is done by calling $hashName["value"]. An example of this would look like the following command:

$users = @{"john.doe" = "jdoe"; "jane.doe" = "jdoe1"}
$users["john.doe"]

The output of this is shown in the following screenshot:

Hashes

After entering the command, you will see that $users["john.doe"] returns jdoe as the correlating value in the hash.

One of the most popular methods to use with hash tables is the add method. The add method allows you to enter new values within the hash table. You can use this while building the hash table, as most hash tables are built within a script. If you want to add another user to the hash table, use the add method as shown here:

$users = @{"john.doe" = "jdoe"; " jane.doe" = "jdoe1"}
$users
$users.add("John.Smith", "jsmith")
$users

The output of this is shown in the following screenshot:

Hashes

You will see that John.Smith with the value of jsmith is now added to the hash table.

You can also update values in a hash by leveraging the hash's index. This is done by searching for a value and then setting its correlating hash value equal to a new value. This looks like $arrayName["HashIndex"] = "New value". An example of this is given here:

$users = @{"john.doe" = "jdoe"; "jane.doe" = "jdoe1"}
$users
$users["jane.doe"] = "jadoe"
$users

The output of this is shown in the following screenshot:

Hashes

You will see that the mapped value for Jane.Doe now reads jadoe. This is vastly different from an array, where you would have to search for a specific value location to replace the value.

If you want to remove a user from the hash table, use the remove method, as shown here:

$users = @{"john.doe" = "jdoe"; "jane.doe" = "jdoe1"}
$users
$users.remove("Jane.Doe")
$users

The output of this is shown in the following screenshot:

Hashes

You will see that Jane.Doe is now removed from the hash table. This method is helpful when you need to remove specific values, which meet certain criteria, from the hash table.

Deciding the best container for your scripts

When you are scripting, it is important to put consideration into what kind of container you will be using. Sometimes the simplicity of creating a singular variable and updating that variable is less complex than creating an array or hash table to search through. At other times, it may be more efficient to pull the whole dataset and use individual pieces of that data within your script.

Single-line variables can be used for:

  • Math operations that require calculations of single or multiple values
  • Catching single-line output from executing a non-PowerShell command
  • Tracking current position in a loop like "percent complete"

Arrays are best used for:

  • Storing a list of items for individual processing within a script
  • Dumping error information from a PowerShell cmdlet

Hashes are best used for:

  • Mapping data from one value to another value
  • Data that requires frequent searching, updating, or building during script execution
  • Storing multiple values of correlated data like user object attributes

Summary

This chapter explores the use of a variety of containers. You learned that variables, arrays, and hashes have the commonality of being able to store data, but they do it in different ways. You learned that different types of data can be stored in these containers. These types of data include numbers, strings, and objects.

This chapter explored that variables are best used for the storage of single-dimensional datasets. These datasets can contain strings but also include mathematical equations that PowerShell has the ability to inherently calculate. You also now know that arrays are primarily used in situations where you want to store more than one set of data. You are able to navigate, add, and remove values in the array based off of a starting value of 0. Last, you learned that hashes are best used while correlating data from one value to another. You are able to add, remove, and search data contained in the hash tables with the use of simple commands. In the next chapter, you will learn techniques to perform data parsing and manipulation by leveraging variables and arrays.

Left arrow icon Right arrow icon

Description

If you are a system administrator who wants to become an expert in controlling and automating your Windows environment, then this book is for you. Prior knowledge of PowerShell's core elements and applications is required for this book.

What you will learn

  • Utilize variables, hashes, and arrays to store data
  • Parse and manipulate different data types
  • Optimize code through the use of functions, switches, and looping structures
  • Create and implement regular expressions in PowerShell scripts
  • Leverage sessionbased remote management
  • Manage files, folders, and registries through the use of PowerShell
  • Discover the best practices to manage Microsoft systems

Product Details

Country selected
Publication date, Length, Edition, Language, ISBN-13
Publication date : Apr 27, 2015
Length: 282 pages
Edition : 1st
Language : English
ISBN-13 : 9781782173564
Vendor :
Microsoft
Languages :
Tools :

What do you get with eBook?

Product feature icon Instant access to your Digital eBook purchase
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
OR
Modal Close icon
Payment Processing...
tick Completed

Billing Address

Product Details

Publication date : Apr 27, 2015
Length: 282 pages
Edition : 1st
Language : English
ISBN-13 : 9781782173564
Vendor :
Microsoft
Languages :
Tools :

Packt Subscriptions

See our plans and pricing
Modal Close icon
$19.99 billed monthly
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Simple pricing, no contract
$199.99 billed annually
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just $5 each
Feature tick icon Exclusive print discounts
$279.99 billed in 18 months
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just $5 each
Feature tick icon Exclusive print discounts

Frequently bought together


Stars icon
Total $ 147.97
Getting Started with Powershell
$43.99
Mastering Windows PowerShell Scripting
$54.99
Active Directory with PowerShell
$48.99
Total $ 147.97 Stars icon
Banner background image

Table of Contents

15 Chapters
1. Variables, Arrays, and Hashes Chevron down icon Chevron up icon
2. Data Parsing and Manipulation Chevron down icon Chevron up icon
3. Comparison Operators Chevron down icon Chevron up icon
4. Functions, Switches, and Loops Structures Chevron down icon Chevron up icon
5. Regular Expressions Chevron down icon Chevron up icon
6. Error and Exception Handling and Testing Code Chevron down icon Chevron up icon
7. Session-based Remote Management Chevron down icon Chevron up icon
8. Managing Files, Folders, and Registry Items Chevron down icon Chevron up icon
9. File, Folder, and Registry Attributes, ACLs, and Properties Chevron down icon Chevron up icon
10. Windows Management Instrumentation Chevron down icon Chevron up icon
11. XML Manipulation Chevron down icon Chevron up icon
12. Managing Microsoft Systems with PowerShell Chevron down icon Chevron up icon
13. Automation of the Environment Chevron down icon Chevron up icon
14. Script Creation Best Practices and Conclusion Chevron down icon Chevron up icon
Index Chevron down icon Chevron up icon

Customer reviews

Top Reviews
Rating distribution
Full star icon Full star icon Full star icon Full star icon Half star icon 4.4
(16 Ratings)
5 star 75%
4 star 12.5%
3 star 0%
2 star 6.3%
1 star 6.3%
Filter icon Filter
Top Reviews

Filter reviews by




Me May 23, 2015
Full star icon Full star icon Full star icon Full star icon Full star icon 5
I have numerous books on PowerShell and have been working with PowerShell for only a few months. But this is the first book on PowerShell that I can say truly speaks to me. The light bulb came on as I was reading this book. It is well written and organized in such a manner that I can honestly see myself taking my PowerShell skills to the next level. It is an absolutely great book that I would highly recommend to anyone who also wants to take their PowerShell skills to the next level. Each chapter made me want to continue reading more and had me looking forward to the next chapter. I am also looking forward to introducing this book to all of my co-workers with the hope that they also will build on their knowledge of PowerShell. This book has earned a permanent place on my bookshelf. Thank you for this book…
Amazon Verified review Amazon
Brenton Blawat May 07, 2015
Full star icon Full star icon Full star icon Full star icon Full star icon 5
After a years worth of work, I finally have the Mastering Windows PowerShell Scripting book complete. It is absolutely everything you need to know to become a PowerShell Master in your environment. I hope you enjoy the book as much as I enjoyed writing it!
Amazon Verified review Amazon
Todd M. Williamsen Jun 15, 2016
Full star icon Full star icon Full star icon Full star icon Full star icon 5
I personally have worked with the author at a mutual client. Brenton is extremely willing to help at any costs, and he exhibits the same motive in this book.
Amazon Verified review Amazon
Jason P Dec 02, 2015
Full star icon Full star icon Full star icon Full star icon Full star icon 5
I am starting out learning PowerShell for my job and this book helped me out a ton. Great book, well written, excellent guide.
Amazon Verified review Amazon
Kenzo Sep 02, 2016
Full star icon Full star icon Full star icon Full star icon Full star icon 5
great foundational fountain of knowledge for powershell
Amazon Verified review Amazon
Get free access to Packt library with over 7500+ books and video courses for 7 days!
Start Free Trial

FAQs

How do I buy and download an eBook? Chevron down icon Chevron up icon

Where there is an eBook version of a title available, you can buy it from the book details for that title. Add either the standalone eBook or the eBook and print book bundle to your shopping cart. Your eBook will show in your cart as a product on its own. After completing checkout and payment in the normal way, you will receive your receipt on the screen containing a link to a personalised PDF download file. This link will remain active for 30 days. You can download backup copies of the file by logging in to your account at any time.

If you already have Adobe reader installed, then clicking on the link will download and open the PDF file directly. If you don't, then save the PDF file on your machine and download the Reader to view it.

Please Note: Packt eBooks are non-returnable and non-refundable.

Packt eBook and Licensing When you buy an eBook from Packt Publishing, completing your purchase means you accept the terms of our licence agreement. Please read the full text of the agreement. In it we have tried to balance the need for the ebook to be usable for you the reader with our needs to protect the rights of us as Publishers and of our authors. In summary, the agreement says:

  • You may make copies of your eBook for your own use onto any machine
  • You may not pass copies of the eBook on to anyone else
How can I make a purchase on your website? Chevron down icon Chevron up icon

If you want to purchase a video course, eBook or Bundle (Print+eBook) please follow below steps:

  1. Register on our website using your email address and the password.
  2. Search for the title by name or ISBN using the search option.
  3. Select the title you want to purchase.
  4. Choose the format you wish to purchase the title in; if you order the Print Book, you get a free eBook copy of the same title. 
  5. Proceed with the checkout process (payment to be made using Credit Card, Debit Cart, or PayPal)
Where can I access support around an eBook? Chevron down icon Chevron up icon
  • If you experience a problem with using or installing Adobe Reader, the contact Adobe directly.
  • To view the errata for the book, see www.packtpub.com/support and view the pages for the title you have.
  • To view your account details or to download a new copy of the book go to www.packtpub.com/account
  • To contact us directly if a problem is not resolved, use www.packtpub.com/contact-us
What eBook formats do Packt support? Chevron down icon Chevron up icon

Our eBooks are currently available in a variety of formats such as PDF and ePubs. In the future, this may well change with trends and development in technology, but please note that our PDFs are not Adobe eBook Reader format, which has greater restrictions on security.

You will need to use Adobe Reader v9 or later in order to read Packt's PDF eBooks.

What are the benefits of eBooks? Chevron down icon Chevron up icon
  • You can get the information you need immediately
  • You can easily take them with you on a laptop
  • You can download them an unlimited number of times
  • You can print them out
  • They are copy-paste enabled
  • They are searchable
  • There is no password protection
  • They are lower price than print
  • They save resources and space
What is an eBook? Chevron down icon Chevron up icon

Packt eBooks are a complete electronic version of the print edition, available in PDF and ePub formats. Every piece of content down to the page numbering is the same. Because we save the costs of printing and shipping the book to you, we are able to offer eBooks at a lower cost than print editions.

When you have purchased an eBook, simply login to your account and click on the link in Your Download Area. We recommend you saving the file to your hard drive before opening it.

For optimal viewing of our eBooks, we recommend you download and install the free Adobe Reader version 9.