360 likes | 522 Views
Basic. Introduction to Powershell. Basics. PS is a command line interpreter/scripting environment Designed for .Net Similar to C# Easy to instantiate .Net classes Standardized syntax PS is object based – not text based This includes pipeline processing
E N D
Basic Introduction to Powershell
Basics • PS is a command line interpreter/scripting environment • Designed for .Net • Similar to C# • Easy to instantiate .Net classes • Standardized syntax • PS is object based – not text based • This includes pipeline processing • Reduces need for reading process to parse data • V1.0 does not naturally support remote execution.
Start Powershell Start->Programs->Windows Powershell->Windows Powershell
At the command line • Expressions • Cmdlet • PowerShell Functions • PowerShell Scripts • Native Windows Commands - Also - • Supports direct interpolation
PS Drives • Let’s start by looking at the environment • PS Drives give you access to resources in a consistent manner – similar to Unix’s approach to files and devices • PS Drives provide access to folders/files, the registry, existing functions and variables etc • Enter the following at the command line:
Experience exercise Enter the following lines at the command prompt and observe the behavior: #Key in this line and the rest below 54 (54 * 3 ) – 2 "Patrick is " + 54 Get-Date
Operators • () {} - Grouping • ++ , -- Increment, decrement, respectively • + , - Unary operator • * or *= Multiplication. • / or /= Division. • % or %= Modulus • +or += Addition. • - or -= Subtraction. • = Assigns a value to a variable • Standard rules of precedence apply.
.Net CLR Types In .Net everything is an object.
Exploring on your own 129 + "1" "1" + 129 [int]"0129" + 1 [datetime]"10/20/2009" "We are meeting on " + get-date "We are meeting on " + (get-date)
Expressions are objects • Let’s explore this by entering the following (120).GetType() "Patrick Bailey".GetType() "Patrick Bailey".ToUpper() “Pat has " + "Pat".Length + " letters." (Get-Date).AddYears(-5)
Variables while we’re at it $a = 123.45 $a.GetType() $b = "Patrick" $b.GetType()
Arrays $a = 1,2,3,4,7,"How do you do", 9,(Get-Date) $a $a[2] $a[3..6] $a[-1]
Hashtables $list = @{"St Paul" = [datetime]"10/20/2009"; ` "Minneapolis" = [datetime]"11/17/2009"} $list $list["St Paul"] Line continuation
Cmdlets • Cmdlets are instances of .NET Framework classes; they are not stand-alone executables. • Cmdlets do not generally do their own parsing, error presentation, or output formatting. Parsing, error presentation, and output formatting are handled by the Windows PowerShell runtime. • Cmdlets process input objects from the pipeline rather than from streams of text, and cmdlets typically deliver objects as output to the pipeline. • Cmdlets are record-oriented because they process a single object at a time. http://msdn.microsoft.com/en-us/library/ms714395%28VS.85%29.aspx
Cmdlet(A compiled application for the PS environment) • 131 Cmdlets in v1.0, 237+ in V2.0 • verb-noun naming (e.g. get-childitem) • Elements of a command : command -parameter1 -parameter2 arg1 arg2 Positional Argument Switch Parameter Command Name Parameter with argument Ref: http://technet.microsoft.com/en-us/library/dd315315.aspx
Information about the system • Enter each of these and observe Get-Command Get-Command -Verb Set notepad Get-Process Get-Process notepad Get-Service -Name *sql* Ref: http://technet.microsoft.com/en-us/library/dd315315.aspx
Some standard named params • -ErrorAction Behavior when an error occurs. Values include SilentlyContinue, Continue (defualt), Stop • -Confirm Before execution the command will ask user for continuation option. Mostly available with commands that alter resources. • -ErrorVariable Variable to assign error object to. • -WhatIf Describes the action that would be taken – does not execute command
Try these one at a time… Set-Content demofile.txt "Hello`nThis is the second line." –Confirm Get-Content demofile.txt -OutVariabletxtContent $txtContent Remove-Item demofile.txt –WhatIf Remove-Item demofile.txt Remove-Item demofile.txt #yes this repeats it Remove-Item demofile.txt -ErrorActionSilentlyContinue
Filter cmdlets and the pipeline • Most cmdlets, as you have seen, produce objects for their output. Literal values do the same. • Get-Member provides a listing of the public members of those objects • By default it displays public instance members
The pipeline • Similar to traditional scripting languages • BUT it “pipes” objects – specifically .Net objects • Access to data is through methods and properties – not string parsing* *Of course, any property of type string has the expected set of methods for returning modifications of the string.
Examples of Get-Member "Pat winks" | Get-Member Get-Process | Get-Member [Int32] | Get-Member [Int32] | Get-Member –Static [Int32]::MaxValue
A closer look notepad;notepad $plist = Get-Process notepad $p1 = $plist[0] $p1 | Get-Member $p1.HasExited Stop-Process -Id $p1.Id $p1.HasExited “It’s not rude to point”
Filtering in action notepad;notepad;notepad Get-Process | Where-Object { $_.Name -eq "notepad" } Get-Process | Select-Object Handles, Id, ProcessName Get-Process -Name notepad | ForEach-Object { Stop-Process $_.Id }
What was that? • Script blocks – think of them as anonymous methods or short inline scripts • $_ is similar to Perl’s use as the current value in process
Grouping Objectsget-childitem C:\temp | group-object extension
Service Cmdlets • get-service • new-service • restart-service • set-service • stop-service • start-service