Mastering windows powershell scripting

Book
description

Grasp advanced PowerShell Core 6.0 functionalities to automate your environment

Key Features

  • Keep up with changes introduced in PowerShell Core 6.0
  • Easily maintain appropriate compatibility with older versions
  • Automate complex tasks, manipulate data, and secure your environment with PowerShell Core 6.0

Book Description

PowerShell scripts offer a handy way to automate various chores, however working effectively with these scripts can be a difficult task.

This comprehensive guide starts with the fundamentals before moving on to advanced-level topics to help you become a PowerShell Core 6.0 expert. The first module, PowerShell Core 6.0 Fundamentals, begins with the new features of PowerShell Core 6.0, installing it on Linux, and working with parameters, objects and .NET classes from within PowerShell Core 6.0. As you make your way through the chapters, you’ll see how to efficiently manage large amounts of data and interact with other services using PowerShell Core 6.0. You’ll be able to make the most of PowerShell Core 6.0’s powerful automation feature, where you will have different methods available to parse data and manipulate regular expressions and Windows Management Instrumentation (WMI). After having explored automation, you will enter the extending PowerShell Core 6.0 module, covering asynchronous processing and desired state configuration. In the last module, you will learn to extend PowerShell Core 6.0 using advanced scripts and filters, and also debug issues along with working on error handling techniques.

By the end of this book, you will be an expert in scripting with PowerShell Core 6.0.

What you will learn

  • Optimize code through the use of functions, switches, and looping structures
  • Work with objects and operators to test and manipulate data
  • Parse and manipulate different data types
  • Create scripts and functions using PowerShell
  • Use jobs, events, and popular public modules which assist with implementing multithreading
  • Write .NET classes with ease within the PowerShell
  • Create and implement regular expressions in PowerShell scripts
  • Make use of advanced techniques to define and restrict the behavior of parameters

Who this book is for

If you are a system administrator who wants to become an expert in controlling and automating your Windows environment, then Mastering Windows PowerShell Scripting is for you. It is also ideal for those new to the PowerShell language.

Mastering-Windows-PowerShell-Scripting-Fourth-Edition

Mastering Windows PowerShell Scripting Fourth Edition, published by Packt

About the book

PowerShell scripts offer a convenient way to automate various tasks.

This comprehensive guide starts with the basics before moving on to advanced topics to help you become a PowerShell 7.1 expert. This extensively revised edition includes two new chapters on debugging and troubleshooting and creating GUIs. Learn the new features of PowerShell 7.1 by working with parameters, objects, and .NET classes from within PowerShell 7.1. As you work through the chapters, you’ll see how to efficiently manage substantial amounts of data and interact with other services using PowerShell 7.1. Make the most of PowerShell’s automation features, using different methods to parse data, manipulate regular expressions, and work with Windows Management Instrumentation (WMI). Advanced topics include asynchronous processing, desired state configuration, using more complex scripts and filters, debugging issues, and error-handling techniques.

By the end of this PowerShell book, you will be an expert in scripting with PowerShell 7.1.

What you will learn

  1. Optimize code with functions, switches, and looping structures
  2. Work with objects and operators to test and manipulate data
  3. Parse and manipulate different data types
  4. Create scripts and functions using PowerShell
  5. Use jobs, runspaces, and runspace pools to run code asynchronously
  6. Write .NET classes with ease within PowerShell
  7. Create and implement regular expressions in PowerShell scripts
  8. Make use of advanced techniques to define and restrict the behavior of parameters

Download a free PDF

If you have already purchased a print or Kindle version of this book, you can get a DRM-free PDF version at no cost.
Simply click on the link to claim your free PDF.

https://packt.link/free-ebook/9781800206540

1 online resource (1 volume) :

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

Online resource; title from cover page (Safari, viewed May 12, 2015)

Includes index

Cover; Copyright; Credits; Foreword; About the Author; About the Reviewers; www.PacktPub.com; Table of Contents; Preface; Chapter 1: Variables, Arrays, and Hashes; Variables; Objects stored in variables; Arrays; Single-dimension arrays; Jagged arrays; Updating array values; Hashes; Deciding the best container for your scripts; Summary; Chapter 2: Data Parsing and Manipulation; String manipulation; Replacing and splitting strings; Counting and trimming strings; The Trim method; The Substring method; The string true and false methods; Number manipulation and parsing; Formatting numbers

Formatting bytesDate and time manipulation; Forcing data types; Piping variables; Summary; Chapter 3: Comparison Operators; Comparison operator basics; Equal and not equal comparison; Greater than and less than comparison; Contains, like, and match operators; And / OR comparison operators; Best practices for comparison operators; Summary; Chapter 4: Functions, Switches, and Loops Structures; Functions; Looping structures; Switches; Combining the use of functions, switches, and loops; Best practices for functions, switches, and loops; Best practices for functions

Best practices for looping structures and switchesSummary; Chapter 5: Regular Expressions; Getting started with regular expressions; Regular expression grouping constructs and ranges; Regular expression quantifiers; Regular expression anchors; Regular expressions examples; Summary; Chapter 6: Error and Exception Handling and Testing Code; Error and exception handling — parameters; Error and exception handling — Try/Catch; Error and exception handling -Try/Catch with parameters; Error and exception handling — legacy exception handling; Methodologies for testing code

Testing the -WhatIf argumentTesting the frequency; Hit testing containers; Don’t test in production; Summary; Chapter 7: Session-based Remote Management; Utilizing CIM sessions; Creating a session; Creating a session with session options; Using sessions for remote management; Removing sessions; Summary; Chapter 8: Managing Files, Folders, and Registry Items; Registry provider; Creating files, folders, and registry items with PowerShell; Adding named values to registry keys; Verifying files, folders, and registry items; Copying and moving files and folders

Renaming files, folders, registry keys, and named valuesDeleting files, folders, registry keys, and named values; Summary; Chapter 9: File, Folder, and Registry Attributes, ACLs, and Properties; Retrieving attributes and properties; Viewing file and folder extended attributes; Setting the mode and extended file and folder attributes; Managing file, folder, and registry permissions; Copying access control lists; Adding and removing ACL rules; Summary; Chapter 10: Windows Management Instrumentation; WMI structure; Using WMI objects; Searching for WMI classes

Mastering Windows PowerShell Scripting

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

Subscription

Free Trial

Renews at $19.99p/m

What do you get with Print?


Instant access to your digital copy whilst your Print order is Shipped


Paperback book shipped to your preferred address


Redeem a companion digital copy on all Print orders


Access this title in our online reader with advanced features


DRM FREE — Read whenever, wherever and however you want

View table of contents


Preview Book

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:

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:

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:

The output of this is shown in the following screenshot:

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:

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:

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:

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.

Page
1
of 6

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


Estimated delivery fee
Deliver to United States

Economy delivery
10 — 13 business days


Free

$6.95

Premium delivery
6 — 9 business days


$21.95


(Includes tracking information)

Publication date :
Apr 27, 2015

Length:
282 pages

Edition :
1st

Language :
English

ISBN-13 :
9781782173557

What do you get with Print?


Instant access to your digital copy whilst your Print order is Shipped


Paperback book shipped to your preferred address


Redeem a companion digital copy on all Print orders


Access this title in our online reader with advanced features


DRM FREE — Read whenever, wherever and however you want

Estimated delivery fee
Deliver to United States

Economy delivery
10 — 13 business days


Free

$6.95

Premium delivery
6 — 9 business days


$21.95


(Includes tracking information)

Publication date :
Apr 27, 2015

Length:
282 pages

Edition :
1st

Language :
English

ISBN-13 :
9781782173557

Brief content visible, double tap to read full content.

Full content visible, double tap to read brief content.

I started early working with computers at the age of 8, where I spent countless hours learning programming languages for Internet Relay Chat (IRC); better known as online chat. My passion for engineering continued in middle school through interests in electrical engineering, and in high school taking classes for the Cisco Certified Network Administrator course-ware. At the age of 16, I obtained my first IT position working for a plastics injection company performing support desk and network design. From that position, my career flourished into being a traveling consultant for 16+ years, and providing solutions to a variety of Fortune 500 organizations. I currently work for a large IT organization that delivers a wide-variety of enterprise solutions. I find myself very fortunate for the breaks, opportunities, and experiences in my life that has gotten me to being where I am today.

Outside of my career, I’ve always been an active individual. I’ve taken up a plethora of interests which includes activities such as tae kwon do, boxing, mixed martial arts, and eventually lead me to training for body building. While I was injured before I could compete for body building, the principles and discipline I obtained definitely show in my work ethic.

My favorite authors are Guy Kawasaki (The Art of Start) and Timothy Ferriss (The 4 Hour Work Week). These two individuals have displayed that working smarter, not harder, is the only way to do business. These authors are the reasons why I have so much drive to be an entrepreneur and have helped so many startup organizations get their concepts going.

Brent Blawat’s goal is to promote the use of technology and share business knowledge with the community.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Нагрузка на жесткий диск 100 windows 10 без причины
  • Какая последняя модель windows
  • Latest windows 7 ultimate
  • Add docker to path windows
  • Самая легкая windows 7 embedded standard в 2021 году