2. What IS PowerShell?
What are Cmdlets, Objects and the Pipeline?
Language fundamentals
How do I install and setup PowerShell>
How do I use PowerShell?
PowerShell profiles
Getting the most from PowerShell
Why does it matter?
3. PowerShell is
Microsoft’s task automation platform.
Part of Microsoft’s Common Engineering Criteria
Included with every version of Windows 7/Server 2008
R2 (and as a OS patch for earlier versions)
In a couple of years, if you don’t know
PowerShell you may not have a job as an IT Pro!
4. Shell
Unix like (console.exe)
Lightweight IDE (sort of VS Lite)
Scripting Language
Power of Perl/Ruby
Extensible
Create your own cmdlets/providers/types/etc
Leverage the community
Built on .NET and Windows
MS-centric/MS-focused
8. The fundamental unit of functionality
Implemented as a .NET Class
Get some, buy some, find some, or build your own
Cmdlets take parameters
Parameters have names (prefaced with “-”)
Parameter names can be abbreviated
Cmdlets can have aliases
Built in or add your own
Aliases do NOT include parameter aliasing
9. A computer abstraction of a real life thing
A process
A server
An AD User
Objects have occurrences you manage
The processes running on a computer
The users in an OU
The files in a folder
10. PowerShell supports:
.NET objects
COM objects
WMI objects
Syntax and usage vary
So similar, yet so different
LOTS more detail – just not in this session
11. Connects cmdlets
One cmdlet outputs objects
Next cmdlet uses them as input
Pipeline is not a new concept
Came From Unix/Linux
PowerShell Pipes objects not text
12. Connects output from a cmdlet to the input of
another cmdlet
Combination of the all cmdlets etc makes a
pipeline
14. Simple to use
Just string cmdlets/scripts/functions together
Simpler to write in many cases
Very powerful in operation
Lets PowerShell do the heavy lifting
Integrates functionality stacks
OS
Application
PowerShell Base
Community
15. A key concept in PowerShell
Built-in help (Get-Help, Get-Command)
Automatic linking to online help
Huge PowerShell ecosystem – the community
Social networking: eg Twitter, Facebook, etc
Mailing lists and newsgroups
Web sites and blogs
User Groups
3rd party support – free stuff coming!
17. Variables contain objects during a session
Variables named starting with ‘$’
$myvariable = 42
Variable’s Type is implied (or explicit)
$myfoo = ls c:foo
Variables can put objects into pipeline
$myfoo | format-table name
Variables can be reflected on
$myfoo | get-member
You can use variables in scripts and the command line
18. Some variables come with PowerShell
$PSVersionTable
$PSHome
Some variables tell PowerShell what to do
$WarningPreference
$MaximumHistoryCount
You can create variables in Profile(s) that persist
Using your profile (more later)
See the variables in your current session
ls Variable:
19. Scalar variable contains a single value
$i=42
Can use properties/methods directly
$i=42; $i.tostring("p")
Use to calculate a value for use in formatting
See more in discussion on Formatting (next session)
20. Array variables contain multiple values/objects
Array members addressed with [], e.g. $a[0]
$a[0] is first item in array
$a[-1] is last item
Use .GetType()
$myfoo = LS c:foo
$myfoo.gettype()
Array members can be one or multiple types
LS c: | Get-Member
Arrays used with loops
21. Special type of an array
Also known as dictionary or property bag
Contains a set of key/value pairs
Values can be read automagically
$ht=@{"singer"="Jerry Garcia“;
"band"="Greatful Dead”}
$ht.singer
Value can be another hash table!
See Get-Help about_hash_tables
22. $ht = @{Firstname=“Thomas"; Surname="Lee";
Country="UK";Town="Cookham}
$ht | sort name | ft -a
Name Value
---- -----
Surname Lee
County Berkshire
Town Cookham
Firstname Thomas
Country UK
23. $ht = @{Firstname=“Thomas"; Surname="Lee";
Country="UK";Town="Cookham}
$ht.GetEnumerator() | sort name | ft -a
Name Value
---- -----
Country UK
County Berkshire
Firstname Thomas
Surname Lee
Town Cookham
24. Variables can be implicitly typed
PowerShell works it out by default
$I=42;$i.gettype()
Variables can be explicitly typed
[int64] $i = 42
$i.gettype()
Typing an expression
$i = [int64] (55 – 13); $i.gettype()
$i = [int64] 55 – [int32] 13; $i.gettype()
$i = [int32] 55 – [int64] 13; $i.gettype()
27. Operator Function Operator
Call &
Property dereference .
Range Operator ..
Format operator -f
Subexpression operator $( )
Array Subexpression operator @( )
Array operator ,
28. Variables plus operators
Produce some value
Value can be an object too!
Simple expressions
$i+1; $j-1; $k*2, $l/4
Boolean expression
General format is: <value> -<operator> <value>
$a –gt $b
$name –eq "Thomas Lee"
29. History
Redirection etc a historical reality
Keep the parser simple
PowerShell does more than simple ">"!!
Case insensitive vs. case sensitive comparisons
30. Lots!
Modules
Way of managing PowerShell code in an enterprise
Remoting
1:1 or 1:many Remoting
XML Support
Native XML
More, more, more
Discover, discover, discover!
32. Built in to Win7, Server 2008 R2
On Server, add ISE Feature
On Server Core PowerShell – add feature (and .NET)
Down-level operating systems
Shipped as an OS Patch with WinRM – KB 968929
Get it from the net - http://tinyurl.com/pshr2rtm
NB: Different versions i386 vs x64, XP/Vista/2008
No version for IA64 or Windows 2000(Or earlier)
Beware of search engine links to beta versions
33. From the Console
Start/PowerShell
From the PowerShell ISE
Start/PowerShellISE
Part of an application
GUI layered on PowerShell
Application focused console
Third Party IDEs
PowerShell Plus
PowerGUI
34. Add third party tools
There are lots!
Using Built-in tools
This will vary with what OS you use and which
applications you are running
Configure PowerShell using Profiles
35. Special scripts that run at startup
Multiple Profiles
Per User vs. Per System
Per PowerShell Console vs. for ALL consoles
ISE profile – just for ISE
Creating a profile
Leveraging other people’s work
If you use it - stick it in your profile!
36. Set up prompt
Function prompt {“Psh`[$(pwd)]: “}
Add personal aliases
Set-Alias gh get-help
Create PSDrives
New-PsDrive demo file e:pshdemo
Set size/title of of PowerShell console
$host.ui.rawui.WindowTitle = "PowerShell Rocks!!!"
$host.ui.rawui.buffersize.width=120
$host.ui.rawui.buffersize.height=9999
$host.ui.rawui.windowsize.width=120
$host.ui.rawui.windowsize.height=42
37. Start with replacing CMD.Exe with PowerShell
Get some good training
Use shared code where possible
Use great tools
Don’t re-invent the wheel
Leverage the community
38. Official MOC
6434 – 3 day based on PowerShell V1
10325 – upcoming 5 day course (due 8/10)
PowerShell Master Class
http://www.powershellmasterclass.com
New Horizons CWL
V2 course coming
39. Use your favorite search engine!!!
PowerShell Owner’s Manual
http://technet.microsoft.com/en-
us/library/ee221100.aspx
PowerShell – Getting Started Guide
http://tinyurl.com/pshgsg
PowerShell references
http://www.reskit.net/psmc
40. PowerShell is not just an IT Pro tool
Developers need it too
Build cmdlets
Build providers
Build Management GUIs
More on this topic in some other day.
41. PowerShell:
Combines cmdlets, objects and the pipeline
Provides a programming language and many more
features we’ve not looked at today
Enables local and remote management
Is easy to get and easy to customise via profiles
Is supported by discovery and a vibrant community
PowerShell is the future of managing Windows
and Windows applications
42. I will answer what I can now
More questions – email me at:
doctordns@gmail.com