contents
preface
about this book
about the author
acknowledgments
- 1 Before you begin
- 1.1 Why you can’t afford to ignore PowerShell
- 1.2 Is this book for you?
- 1.3 How to use this book
- 1.4 Setting up your lab environment
- 1.5 Installing Windows PowerShell
- 1.6 Online resources
- 1.7 Being immediately effective with PowerShell
- 2 Running commands
- 2.1 Not scripting: just running commands
- 2.2 Opening PowerShell
- 2.3 Managing files and folders—you know this!
- 2.4 Accuracy counts
- 2.5 Not just files and folders: introducing PSDrives
- 2.6 Support for external commands
- 2.7 The same old commands—almost
- 2.8 Common points of confusion
- 2.9 Lab
- 3 Using the help system
- 3.1 The help system: how you discover commands
- 3.2 Asking for help
- 3.3 Using help to find commands
- 3.4 Interpreting the help
- 3.5 Accessing “about” topics
- 3.6 Accessing online help
- 3.7 Lab
- 3.8 Ideas for on your own
- 4 The pipeline: connecting commands
- 4.1 Connect one command to another: less work for you!
- 4.2 Exporting to a CSV or XML file
- 4.3 Piping to a file or printer
- 4.4 Converting to HTML
- 4.5 Using cmdlets to kill processes and stop services
- 4.6 Lab
- 5 Adding commands
- 5.1 How one shell can do everything
- 5.2 About product-specific management shells
- 5.3 Extensions: finding and adding snap-ins
- 5.4 Extensions: finding and adding modules
- 5.5 Command conflict and removing extensions
- 5.6 Finding help on newly added commands
- 5.7 Playing with Server Manager via command line!
- 5.8 Profile scripts: preloading extensions when the shell starts
- 5.9 Common points of confusion
- 5.10 Lab
- 5.11 Ideas for on your own
- 6 Objects: just data by another name
- 6.1 What are objects?
- 6.2 Why PowerShell uses objects
- 6.3 Discovering objects: Get-Member
- 6.4 Object attributes, or “properties”
- 6.5 Object actions, or “methods”
- 6.6 Sorting objects
- 6.7 Selecting the properties you want
- 6.8 Objects until the very end
- 6.9 Common points of confusion
- 6.10 Lab
- 7 The pipeline, deeper
- 7.1 The pipeline: enabling power with less typing
- 7.2 Pipeline input ByValue, or why Stop-Service works
- 7.3 Parentheses instead of pipelines
- 7.4 Pipeline input ByPropertyName
- 7.5 Creating new AD users, fast and easy
- 7.6 When things don’t line up: custom properties
- 7.7 Extracting the value from a single property
- 7.8 Lab
- 8 Formatting—and why it’s done on the right
- 8.1 Formatting: making what you see prettier
- 8.2 About the default formatting
- 8.3 Formatting tables
- 8.4 Formatting lists
- 8.5 Formatting wide
- 8.6 Custom columns and list entries
- 8.7 Going out: to a file, a printer, or the host
- 8.8 Another out: GridViews
- 8.9 Common points of confusion
- 8.10 Lab
- 8.11 Ideas for on your own
- 9 Filtering and comparisons
- 9.1 Making the shell give you just what you need
- 9.2 Filter left
- 9.3 Comparison operators
- 9.4 Filtering objects out of the pipeline
- 9.5 The iterative command-line model
- 9.6 Common points of confusion
- 9.7 Lab
- 9.8 Ideas for on your own
- 10 Remote control: one to one, and one to many
- 10.1 The idea behind remote PowerShell
- 10.2 WinRM overview
- 10.3 Using Enter-PSSession and Exit-PSSession for 1:1 remoting
- 10.4 Using Invoke-Command for one-to-many remoting
- 10.5 Differences between remote and local commands
- 10.6 But wait, there’s more
- 10.7 Common points of confusion
- 10.8 Lab
- 10.9 Ideas for on your own
- 11 Tackling Windows Management Instrumentation
- 11.1 Retrieving management information
- 11.2 A WMI primer
- 11.3 The bad news about WMI
- 11.4 Exploring WMI
- 11.5 Using Get-WmiObject
- 11.6 WMI documentation
- 11.7 Common points of confusion
- 11.8 Lab
- 11.9 Ideas for on your own
- 12 Multitasking with background jobs
- 12.1 Making PowerShell do multiple things at the same time
- 12.2 Synchronous versus asynchronous
- 12.3 Creating a local job
- 12.4 WMI, as a job
- 12.5 Remoting, as a job
- 12.6 Getting job results
- 12.7 Working with child jobs
- 12.8 Commands for managing jobs
- 12.9 Common points of confusion
- 13 Working with bunches of objects, one at a time
- 13.1 Automation for mass management
- 13.2 The preferred way: batch cmdlets
- 13.3 The WMI way: invoking WMI methods
- 13.4 The backup plan: enumerating objects
- 13.5 Common points of confusion
- 13.6 Lab
- 14 Security alert!
- 14.1 Keeping the shell secure
- 14.2 Windows PowerShell security goals
- 14.3 Execution policy and code signing
- 14.4 Other security measures
- 14.5 Other security holes?
- 14.6 Security recommendations
- 14.7 Lab
- 15 Variables: a place to store your stuff
- 15.1 Introduction to variables
- 15.2 Storing values in variables
- 15.3 Fun tricks with quotes
- 15.4 Storing lots of objects in a variable
- 15.5 Declaring a variable’s type
- 15.6 Commands for working with variables
- 15.7 Variable best practices
- 15.8 Common points of confusion
- 15.9 Lab
- 15.10 Ideas for on your own
- 16 Input and output
- 16.1 Prompting for, and displaying, information
- 16.2 Read-Host
- 16.3 Write-Host
- 16.4 Write-Output
- 16.5 Other ways to write
- 16.6 Lab
- 16.7 Ideas for on your own
- 17 You call this scripting?
- 17.1 Not programming … more like batch files
- 17.2 Making commands repeatable
- 17.3 Parameterizing commands
- 17.4 Creating a parameterized script
- 17.5 Documenting your script
- 17.6 One script, one pipeline
- 17.7 A quick look at scope
- 17.8 Lab
- 17.9 Ideas for on your own
- 18 Sessions: remote control, with less work
- 18.1 Making PowerShell remoting a bit easier
- 18.2 Creating and using reusable sessions
- 18.3 Using sessions with Enter-PSSession
- 18.4 Using sessions with Invoke-Command
- 18.5 Implicit remoting: importing a session
- 18.6 Lab
- 18.7 Ideas for on your own
- 19 From command to script to function
- 19.1 Turning a command into a reusable tool
- 19.2 Modularizing: one task, one function
- 19.3 Simple and parameterized functions
- 19.4 Returning a value from a function
- 19.5 Returning objects from a function
- 19.6 Lab
- 19.7 Ideas for on your own
- 20 Adding logic and loops
- 20.1 Automating complex, multi-step processes
- 20.2 Now we’re “scripting”
- 20.3 The If construct
- 20.4 The Switch construct
- 20.5 The For construct
- 20.6 The ForEach construct
- 20.7 Why scripting isn’t always necessary
- 20.8 Lab
- 21 Creating your own “cmdlets” and modules
- 21.1 Turning a reusable tool into a full-fledged cmdlet
- 21.2 Functions that work in the pipeline
- 21.3 Functions that look like cmdlets
- 21.4 Bundling functions into modules
- 21.5 Keeping support functions private
- 21.6 Lab
- 21.7 Ideas for on your own
- 22 Trapping and handling errors
- 22.1 Dealing with errors you just knew were going to happen
- 22.2 Errors and exceptions
- 22.3 The $ErrorActionPreference variable
- 22.4 The -ErrorAction parameter
- 22.5 Using a Trap construct
- 22.6 Trap scope
- 22.7 Using a Try construct
- 22.8 The -ErrorVariable parameter
- 22.9 Common points of confusion
- 22.10 Lab
- 22.11 Ideas for on your own
- 23 Debugging techniques
- 23.1 An easy guide to eliminating bugs
- 23.2 Identifying your expectations
- 23.3 Adding trace code
- 23.4 Working with breakpoints
- 23.5 Common points of confusion
- 23.6 Lab
- 24 Additional random tips, tricks, and techniques
- 24.1 Profiles, prompts, and colors: customizing the shell
- 24.2 Operators: -as, -is, -replace, -join, -split
- 24.3 String manipulation
- 24.4 Date manipulation
- 24.5 Dealing with WMI dates
- 25 Final exam: tackling an administrative task from scratch
- 25.1 Tips before you begin
- 25.2 Lab
- 25.3 Lab solution
- 26 Beyond the operating system: taking PowerShell further
- 26.1 Everything you’ve learned works the same everywhere
- 26.2 SharePoint Server 2010
- 26.3 VMware vSphere and vCenter
- 26.4 Third-party Active Directory management
- 27 Never the end
- 27.1 Ideas for further exploration
- 27.2 “Now that I’m done, where do I start?”
- 27.3 Other resources you’ll grow to love
- 28 PowerShell cheat sheet
- 28.1 Punctuation
- 28.2 Help file
- 28.3 Operators
- 28.4 Custom property and column syntax
- 28.5 Pipeline parameter input
- 28.6 When to use $_
index