Online Conference
June 17th and 18th 2015
EVENTS.COLLAB365.COMMUNITY
Introduction to PowerShell
EVENTS.COLLAB365.COMMUNITY
Who is Michael
Blumenthal?
Michael@Blumenthalit.com
Twitter: @MichaelBL
LinkedIn: http://bit.ly/MBB-LI
https://michaelblumenthal.me
TechCommunity.Microsoft.com
Tenant Admin at a leading broadcast media
company
Office 365 MVP
Dev/ITPro Mix
In IT Consulting since 1995
PowerShelling since 2007
Contact
EVENTS.COLLAB365.COMMUNITY
What is PowerShell?
EVENTS.COLLAB365.COMMUNITY
Why is PowerShell AWESOME?
Write-Host “SO easy to use!”
No Compiling!
EVENTS.COLLAB365.COMMUNITY
• It’s Easy to Get Started!1
• Learn the PowerShell Syntax2
• Working with O3653
• Best Practices4
PowerShell puts .NET at your fingertips!
EVENTS.COLLAB365.COMMUNITY
Chapter 1
It’s Easy to get Started!
EVENTS.COLLAB365.COMMUNITY
Getting Started with PowerShell
2003
2008,R2
2012, R2
2016
7, 8, 8.1, 10
EVENTS.COLLAB365.COMMUNITY
The Command Line Window
EVENTS.COLLAB365.COMMUNITY
Windows Feature
Win
8.x
Win
8-10
EVENTS.COLLAB365.COMMUNITY
The Integrated Script Editor
EVENTS.COLLAB365.COMMUNITY
PowerShell V3-5 ISE
EVENTS.COLLAB365.COMMUNITY
Intellisense!
EVENTS.COLLAB365.COMMUNITY
Chapter 2
Learn the PowerShell Syntax!
EVENTS.COLLAB365.COMMUNITY
Symbols, Keywords, and Syntax! Oh My!
• Variables1
• Commands2
• Piping3
• Comparisons4
• Flow Control5
• Filtering6
EVENTS.COLLAB365.COMMUNITY
Reading Symbols in Code
• (tal Guidance
• Moe, Larry, and }
• The universe started with the
Big !
• !Important
• A # of Bacon and # Browns
EVENTS.COLLAB365.COMMUNITY
Variables
• Case Insensitive, Dynamic typing
$something
$true, $false, $null, $profile
$myMessage= “Hello, World”
1
EVENTS.COLLAB365.COMMUNITY
Commands are called cmdlets.
Verb-Noun
Built-in, Extensible
Get-Help
Get-Member
Get-Command
2
EVENTS.COLLAB365.COMMUNITY
Help!
Discoverability
EVENTS.COLLAB365.COMMUNITY
Get-Command
• Find Cmdlets
• Get details of cmdlets and applications
EVENTS.COLLAB365.COMMUNITY
Aliases
• Dir
• Sort
• Select
• Foreach, also %
Alias cmdlet
• Get-ChildItem
• Sort-object
• Select-object
• Foreach-object
EVENTS.COLLAB365.COMMUNITY
The Power of Piping!
Output Of
Command 1
Input of
Command 2
3
EVENTS.COLLAB365.COMMUNITY
Example
EVENTS.COLLAB365.COMMUNITY
EVENTS.COLLAB365.COMMUNITY
Dial zero for an…
4
Operator
-eq -le
-ne -like
-gt -notlike
-ge -match
-lt -notmatch
Example
EVENTS.COLLAB365.COMMUNITY
Taking Control of the Flow
• If (Test) {Commands} else {Commands}
• if ($web.Title –ne “”) {Write-Host $web.Title}If
• For (Init;Test;Repeat) {Commands}
• for($i=1; $i -le 10; $i++) {Write-Host $i}For
• Foreach (Item in Collection) {Commands}
• Foreach ($gumball in $CandyBag) {$gumball.color}
• Collection | Foreach {Commands}
ForEach
• While (Condition){Commands}
• while($val -ne 3){$val++; Write-Host $val}While
5
EVENTS.COLLAB365.COMMUNITY
Example
EVENTS.COLLAB365.COMMUNITY
Where-Object
•Where {<Test>}Syntax
• V1&2:
Dir | Where {$_.Name –like “B*”}
• V3+:
Dir | where Name –like B*
Example
6
EVENTS.COLLAB365.COMMUNITY
Executing Scripts
.filename.ps1
Set-ExecutionPolicy
Unrestricted
EVENTS.COLLAB365.COMMUNITY
Chapter 3
Connecting To O365
EVENTS.COLLAB365.COMMUNITY
Get the Cmdlets!
Verb-MSOL*AAD
Remote SessionEXO
Verb-PNP*PNP
new-CSOnlineSession; RemoteSK4B
Verb-SPO*SPO
EVENTS.COLLAB365.COMMUNITY
EVENTS.COLLAB365.COMMUNITY
Chapter 4
Best Practices
EVENTS.COLLAB365.COMMUNITY
Use Functions
• Function global:Do-Something(){
• }
• Function global:Do-Something($someParameter){
• }
• Function global:Do-Something{
• param ([type]$someParameter=$(“Default Expression”))
• }
EVENTS.COLLAB365.COMMUNITY
Follow the Naming
Convention!
•Verb-Noun
• 98 Verbs
EVENTS.COLLAB365.COMMUNITY
Comment your functions
• <#
• .SYNOPSIS –a brief explanation of what the script or function does.
• .DESCRIPTION – a more detailed explanation of what the script or function does.
• .PARAMETER name – an explanation of a specific parameter. Replace name with the parameter
name. You can have one of these sections for each parameter the script or function uses.
• .EXAMPLE – an example of how to use the script or function. You can have multiple .EXAMPLE
sections if you want to provide more than one example.
• .NOTES – any miscellaneous notes on using the script or function.
• .LINK – a cross-reference to another help topic; you can have more than one of these. If you
include a URL beginning with http:// or https://, the shell will open that URL when the Help
command’s –online parameter is used.
• #>
EVENTS.COLLAB365.COMMUNITY
Search for Commands
Refresh the command list
Actions you can take
EVENTS.COLLAB365.COMMUNITY
Self Announcing Functions
…
EVENTS.COLLAB365.COMMUNITY
Source Code Control
EVENTS.COLLAB365.COMMUNITY
More Good Ideas
• Always read scripts before
running them
EVENTS.COLLAB365.COMMUNITY
More Good Ideas
• Always read scripts before running
them.
• Make yours safe when others
don’t
EVENTS.COLLAB365.COMMUNITY
More Good Ideas
• Always read scripts before running
them
• Make yours safe when others don’t
• Check for valid parameter values
• get-help
about_Functions_Advanced_Parameters
EVENTS.COLLAB365.COMMUNITY
More Good Ideas
• Always read scripts before running them
• Make yours safe when others don’t
• Check for valid parameter values
• get-help about_Functions_Advanced_Parameters
• Do error handling
• get-help about_Try_Catch_Finally
• get-help about_CommonParameters
– -ErrorAction and -ErrorVariable
EVENTS.COLLAB365.COMMUNITY
http://bit.ly/poshres
Resources
EVENTS.COLLAB365.COMMUNITY
Script something today!
It’s Easy to Get
Started!
PowerShell
Syntax
Office 365

Introduction to PowerShell for Office 365 Global Tenant Admins

Editor's Notes

  • #5 Servers, Desktop OS’s, any .NET API, web services, you name it! No Compliling!
  • #6  Who would like another tool in their toolbox? How about the swiss army knife of tools? It will make you a more productive developer!
  • #8 Who here already has installed and PowerShell? Who’s using Server 2003? 2008? Win 2008 – It’s an OS Feature – “servermanagercmd –install PowerShell”
  • #13 Intellisense!
  • #17 begin with a $ Name that Language… Similar to @variables in SQL, apparently also Ruby, PHP. Arrays start at 0
  • #18 Remove $opposite; add write-host; get-item
  • #19 Mention Aliases
  • #21 Get-Member examples
  • #25 Can you imagine trying to do this if this was just text?
  • #29 Get-Help about_flow_control Mention that collections start at 0
  • #37 Single purpose vs multitool
  • #43 Be a tool maker
  • #48  You owe it to yourself to try out PowerShell. It will make you a better developer!