Basic. PS is a command line interpreter/scripting environment Designed for.Net Similar to C# ...
-
date post
22-Dec-2015 -
Category
Documents
-
view
213 -
download
0
Transcript of Basic. PS is a command line interpreter/scripting environment Designed for.Net Similar to C# ...
Introduction to Powershell
Basic
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:
Get-PSDrive
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.
Powershell Data types
Type Description
[int] 32-bit signed integer
[long] 64-bit signed integer
[string] Fixed-length string of Unicode characters
[char] A Unicode 16-bit character
[byte] An 8-bit unsigned character
[bool] Boolean True/False value
[decimal] An 128-bit decimal value
[single] Single-precision 32-bit floating point number
[double] Double-precision 64-bit floating point number
[xml] Xml object
[array] An array of values
[hashtable] Hashtable 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()
Convenient here-string
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.as
px
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 arg2Command
Name
SwitchParameter
Parameter withargument
PositionalArgument
Ref: http://technet.microsoft.com/en-us/library/dd315315.aspx
Exploring datetime object
Information about the system
Enter each of these and observe
Get-CommandGet-Command -Verb SetnotepadGet-ProcessGet-Process notepadGet-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.
-WhatIfDescribes 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 -OutVariable txtContent
$txtContent
Remove-Item demofile.txt –WhatIf
Remove-Item demofile.txt
Remove-Item demofile.txt #yes this repeats it
Remove-Item demofile.txt -ErrorAction SilentlyContinue
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
Taking it one step further
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 returningmodifications 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
“It’s not rude to point”
notepad;notepad
$plist = Get-Process notepad$p1 = $plist[0]$p1 | Get-Member
$p1.HasExited
Stop-Process -Id $p1.Id
$p1.HasExited
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
Group-Object
Grouping Objects get-childitem C:\temp | group-object extension
Service Cmdlets
get-service new-service restart-service set-service stop-service start-service
Starting and Stopping a Service