330 likes | 468 Vues
This comprehensive guide covers key concepts in PowerShell scripting, focusing on piping commands and string manipulation. Learn how to effectively use commands like `Get-ChildItem`, `Format-Table`, and `Where-Object` to process data streams and improve output formatting. Explore string operations, including creating, splitting, and replacing strings, as well as using Regular Expressions for pattern matching. This resource is perfect for those seeking to enhance their PowerShell skills and streamline their scripting workflows.
E N D
Kemtis Kunanuraksapong MSIS with Distinction MCTS, MCDST, MCP, A+ CN1266 Network Scripting
Chapter 7: Working on a Pipeline Chapter 9: Bringing Strings into the Limelight Agenda
When you take the output of one command and direct it to the input of another command • Try this on command prompt • Ipconfig | find “ipv4 address” • Dir c:\windows\system32 | find “.exe” What is Piping
Try this: Get-childitem c:\windows\system32 | format-table Get-childitem c:\windows\system32 | format-list Get-childitem c:\windows\system32 | format-wide Stringing Commands Together
Cmdlets use out-default as a default format to shows the output • All object are returned to the command as a stream of data Stringing Commands Together (2)
Get-process | format-table • Get-process | format-table –property id, name • Get-process | format-table –property name, id • Get-process | where-object {$_.Id –gt 1000} | format-table –property name, cpu, id • $_ refers to the current object in the pipe-line • Get-process | where-object {$_.Id –gt 1000} | select-object name, cpu, id | sort-object CPU, ID Getting the right output
A technical name for text • A consecutive sequence of characters • Empty VS Null Strings • Empty string – a string with zero length • Null string – undefined string (no value, no length, nothing) What is String?
A literal string is enclosed by double quotes • “this is the a literal string” + • “… so the story continues…” • Here-Strings • $RegularString = “First Line of string`n” + • “Second line `n” + • “Third line” • Write-host $RegularString Literal strings
Here-Strings • $MyHereString = @“ • First Line of string • Second line • Third line • ”@ • Write-host $MyHereString • You also can use quotation in here-string Literal strings (2)
+ (Concatenation) – to combine string together • See code in Page 120 • You can implicitly or explicitly convert the data type into string • See codes in Page 121 Combining strings
Method split() is used to spilt the string into array of strings • $str = “this book is good!” • $str.split() Splitting Strings
$myIP = “192.168.10.100” • $ipArr = $myIP.split(“.”) • Write-Host (“Number of elements in ipArr” + $ipArr.length) • Write-Host (“First octet: “ + $ipArr[0]) • Write-Host (“Second octet: “ + $ipArr[1]) • Write-Host (“Third octet: “ + $ipArr[2]) • Write-Host (“Fourth octet: “ + $ipArr[3]) Splitting Strings (2)
$myIP = “192.168,10;100” • $ipArr = $myIP.split(“.,;”) • Write-Host (“Number of elements in ipArr” + $ipArr.length) • Write-Host (“First octet: “ + $ipArr[0]) • Write-Host (“Second octet: “ + $ipArr[1]) • Write-Host (“Third octet: “ + $ipArr[2]) • Write-Host (“Fourth octet: “ + $ipArr[3]) Splitting Strings (3)
Method substring() • $name = “Steve Seguis” • $part1 = $name.substring(0,3) • $part2 = $name.substring($name.length-4,4) • Write-Host ($part1 + $part2) Snipping off a piece of a string
$str = “Steve is EVIL!!!” $newstr = $str.replace(“EVIL”,”Good~”) Write-Host $newstr String Substitutions
Method IndexOf() is used to find the specific character in the string • $email = “someone@dummies.com” • $atpos = $email.IndexOf(“@”) • $user = $email.substring(0, $atpos) • $domain = $email.substring($atpos+1, $email.length-($atpos+1)) • Write-Host (“Username: “ + $user) • Write-Host (“Domain: “ + $domain) String Positions
$email = “My_invalid_email_address” • If ($email.IndexOf(“@”) –lt 0){ • Write-Host “Invalid email address!” • }else{ • Write-Host “Valid email address!” • } String Positions (2)
Upper case • ToUpper() method • Lower case • ToLower() method Case of Strings
A search pattern • [RegEx]::IsMatch(“This book is really interesting.”,”book”) • [RegEx]::IsMatch(“I have 2 siblings”,”[0-9]”) • *NOTE* It is case sensitive Regular Expression
You can use escape string (\) if you want to search for special character on page 129 • [RegEx]::IsMatch(“Visit us at dummies.com”,”dummies\.com”) • . (dot) is a single-character wildcard • [RegEx]::IsMatch(“bell”,”.ell”) Regular Expression (2)
$username = “testuser1” • [RegEx]::IsMatch($username, “testuser[0-9]”) • If you want the name to end with either ‘a’ or ‘e’ • $name = “Anna” • [RegEx]::IsMatch($name,”Ann[ae]”) Regular Expression (3)
If you want to exclude character from a match, you can negate a character set by prefixing it with the caret (^) • [RegEx]::IsMatch(“food”,”[^fh]ood”) • See Table 9-1 on Page 131 for more information Regular Expression (4)
Question mask (?) indicates that the preceding character can exist zero times or one time • [RegEx]::IsMatch(“favorite”,”favou?rite”) • [RegEx]::IsMatch(“favourite”,”favou?rite”) • [RegEx]::IsMatch(“Monday”,”Mon(day)?”) Define optional
Plus (+) operator indicates that the preceding character can exist one or more times • [RegEx]::IsMatch(“srvfile1”,”srv[a-z0-9]+”) • [RegEx]::IsMatch(“srvfile1”,”srv[a-z]+[0-9]”) • [RegEx]::IsMatch(“Monday”,”Mon(day)?”) Repeating sequences
star (*) operator indicates that the preceding character can exist zero times or more times • [RegEx]::IsMatch(“Ann”,”Ann[a-z]*”) • Repetitve Format • [RegEx]::IsMatch(“96813”,”[0-9] [0-9] [0-9] [0-9] [0-9]” • [RegEx]::IsMatch(“96813”,”[0-9] {5}” Repeating sequences (2)
Repetitve Format • [RegEx]::IsMatch(“96813”,”[0-9] [0-9] [0-9] [0-9] [0-9]” • [RegEx]::IsMatch(“96813”,”[0-9] {5}” • [RegEx]::IsMatch(“USERA”,”USER[A-Z]{2,5}”) • Ends in a sequence of two to five upper case letters Repeating sequences (3)
^ - the match must occur at the beginning of the string • [RegEx]::IsMatch(“SRVFILE1”,”^SRV[A-Z]+[0-9]”) • [RegEx]::IsMatch(“TESTSRVFILE1”,”^SRV[A-Z]+[0-9]”) Anchor to maintain position
$- the match must occur at the end of the string • [RegEx]::IsMatch(“SRVFILE1”,”SRV[A-Z]+[0-9]$”) • [RegEx]::IsMatch(“TESTSRVFILE1”,”SRV[A-Z]+[0-9]$”) • [RegEx]::IsMatch(“SRVFILE1TEST”,”SRV[A-Z]+[0-9]$”) Anchor to maintain position (2)
[RegEx]::IsMatch(“Dummies.com”,”[A-za-z0-9]+\.(com|edu|net)”)[RegEx]::IsMatch(“Dummies.com”,”[A-za-z0-9]+\.(com|edu|net)”) Coming up with alternatives
$email = “Somebody@dummies.com” • If ($email –match “[A-za-z0-9]+@dummies.com”){ • Write-Host “$email is a dummies.com email address” • } RegEx in Windows PowerShell
$str = “Visit us at www.dummies.com” $newstr = $str –replace “www\.[A-za-z0-9]+\.(com|edu|net)”,”WEBSITE NAME KEPT SECRET” Write-Host $newstr RegEx in Windows PowerShell (2)