+ All Categories
Home > Documents > PowerShell for Exchange Admins

PowerShell for Exchange Admins

Date post: 02-Jun-2018
Category:
Upload: adeelshahzadqureshi8086
View: 264 times
Download: 0 times
Share this document with a friend

of 38

Transcript
  • 8/10/2019 PowerShell for Exchange Admins

    1/38

    PowerShell for Exchange Admins

    Get-Speaker | FL

    Name : Kamal AbburiTitle : Premier Field EngineerExpertise : Exchange

    Email : [email protected] : mrproactive.com

    Note: Inspired by my fellow PFEs

    mailto:[email protected]:[email protected]
  • 8/10/2019 PowerShell for Exchange Admins

    2/38

    ReactiveSupport

    What We Do

    Microsoft Confidential2

    Proactive ServicesWorkshopsHealth ChecksRisk Assessments

    Supportability ReviewsChalk & Talks

    Knowledge Transfers

    Troubleshooting & Root Cause Analysis

    Partnerwith

    Product GroupsTechnical

    Leadership

    GlobalCommunity

    Onsite andRemote

  • 8/10/2019 PowerShell for Exchange Admins

    3/38

    Overview

    PowerShell

    Exchange and PowerShell

    Tips and Tricks

    Microsoft Confidential3

  • 8/10/2019 PowerShell for Exchange Admins

    4/38

    Architecture

    Microsoft Confidential4

    PowerShell EngineExchange Cmdlets

    ADMAPIRegistry Metabase

  • 8/10/2019 PowerShell for Exchange Admins

    5/38

    What is PowerShell

    Command Driven Environment

    A scripting language

    Based on .NET Framework

    Unit of operation is a cmdlet

    Cmdlets are .NET classesAll Exchange management operations are implemented asPowerShell cmdlets

    Microsoft Confidential5

  • 8/10/2019 PowerShell for Exchange Admins

    6/38

    Exchange Management ShellBuilt upon PowerShell technologyWindows Management FrameworkPowerShell SDK availableRole Based Access Control Exchange 2010

    Microsoft Confidential6

  • 8/10/2019 PowerShell for Exchange Admins

    7/38

    RBAC and the Shell

    Microsoft Confidential7

    Source : Technet

  • 8/10/2019 PowerShell for Exchange Admins

    8/38

    PowerShell Commands in the EMC

    Microsoft Confidential8

    Logs every Shell command in the EMC

  • 8/10/2019 PowerShell for Exchange Admins

    9/38

    BasicsLocal Shell

    Exchange 2007

    Windows PowerShell host

    Windows PowerShell snap-in, contains exchange cmdlets

    Custom Scripts

    Cmdlet is always run on the local Exchange serverRemote Shell

    Exchange 2010

    Powershell.exe remote connection/session, No Snapin loaded

    Uses Windows Remote Management 2.0

    Gives access to cmdlets that are assigned based on management role

    No need for Exchange Management Tools, but recommended

    Note : When you open shell on exchange 2010 server two sessions are created local and remote

    Microsoft Confidential9

  • 8/10/2019 PowerShell for Exchange Admins

    10/38

    Edge Role

    What is that ?

    Uses the local Shell only on the Edge Transport server role

    Administered individually

    Microsoft Confidential10

  • 8/10/2019 PowerShell for Exchange Admins

    11/38

    Remote PowerShell

    Connect to an Exchange 2010 from a client with WMFinstalled and no 2010 management tools

    $userCred = Get-Credential

    $session = New-PSSession -ConfigurationnameMicrosoft.Exchange ConnectionUrihttp://casservernamefqdn/powershell -Credential$userCred

    Import-PSSession $session

    Remove-PSSession $session

    Set-User kamal-RemotePowerShellEnabled $True

    Microsoft Confidential11

  • 8/10/2019 PowerShell for Exchange Admins

    12/38

    Verbs and NounsNew

    GetSet

    Add

    Update

    Remove

    EnableDisable

    Mount

    Dismount

    Test

    StopStart

    Resume

    Retry

    Microsoft Confidential12

    MailboxDatabaseSendConnectorMailbox

    TransportAgentActiveSyncDeviceSystemHealthServiceHealthJournalRuleMapiConnectivity

    DistributionGroupMailboxDatabaseCopyStatus

  • 8/10/2019 PowerShell for Exchange Admins

    13/38

    cmdlets

    Get-Command

    Get-ExCommad

    Get-Command *mailbox*

    Get-Command Noun Mailbox

    Get-Command Verb Restore

    Microsoft Confidential13

    Tip: Start-Transcript

  • 8/10/2019 PowerShell for Exchange Admins

    14/38

    Objects

    Microsoft Confidential14

    Change PropertySet-Car What_I_Have -Color: Sparkling Bronze Metallic

    MethodsStartDriveStop

    Name What_I_WantedType: ClassicColor: RedSpeed: 100Mileage: 18

    Name What_I_HaveType: FamilyColor: BlueSpeed: 60Mileage: 35

    Name What_I_ShouldType: GreenColor: GreenSpeed: 20Mileage: 55

    Name What_I_DeserveType: Not AffordableColor: RedSpeed: 250Mileage: 8

    Get-Car

  • 8/10/2019 PowerShell for Exchange Admins

    15/38

    Lets look at an exampleGet-Service

    Microsoft Confidential15

  • 8/10/2019 PowerShell for Exchange Admins

    16/38

    The Power of TAB

    PowerShell auto completionAuto complete.

    Try typing get-a

    Scroll through parameters or cmdlets.

    Try typing Get-Mailbox -

    Microsoft Confidential16

  • 8/10/2019 PowerShell for Exchange Admins

    17/38

    Get-Help

    Use help to find cmdlets and categoriesGet-help *User*Get-help -role *UM*Get-help component *recipient*

    Use help pages to drill into more detail

    Get-mailbox -? | moreHelp set-mailbox

    Get-help get-mailbox Detailed

    Get-help set-mailbox Examples

    Get-help set-mailbox Online

    Get-Help -Parameter

    Microsoft Confidential17

  • 8/10/2019 PowerShell for Exchange Admins

    18/38

    Alias

    PowerShell Shorthand NotationAliases are used to shorten common commands in PowerShell.

    Use get-alias to see all aliases

    Create your own alias using new-alias

    Microsoft Confidential18

    Alias Cmdlet

    dir get-childitem

    cd set-location

    rm remove-item

    rmdir remove-item

    copy copy-item

    echo write-outputdel remove-item

    move move-item

  • 8/10/2019 PowerShell for Exchange Admins

    19/38

    Parameters

    Provide information to the cmdlet

    Control how the cmdlet performs its task

    Verb-Noun -ParameterName

    Types

    Positional ( Identity )Named ( Specify the Parameter )

    Boolean($true, $false)

    Switch(confirm)

    Common(Verbose, Debug, ErrorAction)

    Microsoft Confidential19

  • 8/10/2019 PowerShell for Exchange Admins

    20/38

    Syntax

    Verb-Noun -ParameterName

    hyphen indicates a parameter

    Space in Parameter Value:Double quotation marks ( " )

    Single Quote vs Double Quote

    "$Server Example$Server Example

    Escape CharacterGold is `$1600

    Microsoft Confidential20

  • 8/10/2019 PowerShell for Exchange Admins

    21/38

    Exploring Parameters

    Explore the properties of output objects using format-listGet-Mailbox TestUser | format-list

    Get-Mailbox TestUser | fl *quota*

    Get-Mailbox TestUser | fl *

    Get-ExchangeServer Status | fl *

    Get-Mailbox | FT Name,Database

    Explore the property types of output objects using get-member

    Get-storagegroup TestUser | get-member

    Tab it Set-Mailbox-

    Microsoft Confidential21

  • 8/10/2019 PowerShell for Exchange Admins

    22/38

    Operators

    = value on the right side of the equal sign is assigned tothe variable on the left side

    ! logical NOT operator . How do I say Not Equal To

    >, >> send the output of a command to a file

    { } Expression$ Variable

    +,-,*,%

    -eq, -ne, -Like, -and, -or, -gt, -lt

    http://technet.microsoft.com/en-us/library/bb125229

    Tip: Tee-Object

    Microsoft Confidential22

    http://technet.microsoft.com/en-us/library/bb125229http://technet.microsoft.com/en-us/library/bb125229http://technet.microsoft.com/en-us/library/bb125229
  • 8/10/2019 PowerShell for Exchange Admins

    23/38

    Pipeline

    What is pipe between cmdlets?

    Microsoft Confidential23

  • 8/10/2019 PowerShell for Exchange Admins

    24/38

    Use Cases for Pipeline

    Bulk management is possible using pipelining

    Get-Mailbox |Set-Mailbox -param1 arg1 -param2 arg2

    Piping (cmd1 | cmd2) works within same noun

    Get-Mailbox contoso\joe | remove-mailboxAnd certain different nouns

    Get-Mailbox contoso\joe | Test-MapiConnectivity

    Microsoft Confidential24

  • 8/10/2019 PowerShell for Exchange Admins

    25/38

    What are we talking about - Demo

    Microsoft Confidential25

  • 8/10/2019 PowerShell for Exchange Admins

    26/38

    Process Data

    Get-Car Where Color is not Red

    Microsoft Confidential26

  • 8/10/2019 PowerShell for Exchange Admins

    27/38

    $_

    Get-Car Where Color is not Red

    Microsoft Confidential27

    Name What_I_WantedType: ClassicColor: RedSpeed: 100Mileage: 18

    Name What_I_HaveType: FamilyColor: BlueSpeed: 60Mileage: 35

    Name What_I_ShouldType: GreenColor: GreenSpeed: 20Mileage: 55

    Name What_I_DeserveType: Not AffordableColor: RedSpeed: 250Mileage: 8

    $_.Color$_.Speed$_.Type

    $_.Color$_.Speed$_.Type

  • 8/10/2019 PowerShell for Exchange Admins

    28/38

    Lets Confuse you

    Get-Mailbox | Where-Object {$_.Name like *admin*}

    Get-Mailbox | ? {$_.Name like *admin*} | Set-Mailbox -ProhibitSendReceiveQuota 10GB

    Get-Mailbox | ? {$_.Name like *admin*} | Select-ObjectName, ProhibitSendReceiveQuota | Export-Csv -Pathc:\Export.csv

    Microsoft Confidential28

  • 8/10/2019 PowerShell for Exchange Admins

    29/38

    Pipelining to Pipe Data between Dissimilar Nouns

    Use the data from one cmdlet with another cmdlet

    Haven't been optimized to pass objects directly

    Microsoft Confidential29

    Get-Mailbox | Set-Mailbox

    VS

    Get-Mailbox | New-InboxRule

    New-InboxRule -Name "Mark as Read" -Mailbox TEST

  • 8/10/2019 PowerShell for Exchange Admins

    30/38

    So .. How do we do it ?

    We Know about $_

    Get-Mailbox | ForEach-Object {Write-Host $_.Name}

    Get-Mailbox | ForEach { New-InboxRule -Name "Mark as

    Read" -Mailbox $_.Name -From [email protected] -MarkAsRead $True}

    Microsoft Confidential30

  • 8/10/2019 PowerShell for Exchange Admins

    31/38

    WhatIf, Confirm, and ValidateOnly Switches

    WhatifObjects that would be affected by running the command and whatchanges would be made to those objects

    ConfirmStop processing before any changes are made

    ValidateOnlyEvaluate all the conditions and requirements that are needed toperform the operation before you apply any changes

    Microsoft Confidential31

  • 8/10/2019 PowerShell for Exchange Admins

    32/38

    Multi Valued

    @{Add="[email protected]"}

    @{Remove="[email protected]"}

    Microsoft Confidential32

  • 8/10/2019 PowerShell for Exchange Admins

    33/38

    Variables

    $

    $CurrentDate = Get-Date

    $CurrentDate | Get-Member

    Microsoft Confidential33

  • 8/10/2019 PowerShell for Exchange Admins

    34/38

    Filtering

    Built in filter Get-mailbox filter {aliaslike ka*}

    Wildcard Get-mailbox admin*

    Get-ExchangeServer *North*

    Get-SendConnector *.test.com

    Where-object (alias where) Get-mailbox | where {$_.Alias like *admin*}

    Get-TransportServer | where { $_.MessageTrackingLogEnabled eq $false }

    Microsoft Confidential34

  • 8/10/2019 PowerShell for Exchange Admins

    35/38

    Working with Command Output

    Format-list (FL)Get-Mailbox | FL

    Get-Mailbox | FL *

    Get-Mailbox | FL *Quota*

    Format-table (FT)

    Get-Mailbox | FT

    Get-Mailbox | FT *

    Get-Mailbox | FT Name, Alias,Database

    Sort-object (sort)

    Get-mailboxstatistics | sort property itemcount descGroup-object (group)

    Get-mailbox | group property Database

    Microsoft Confidential35

  • 8/10/2019 PowerShell for Exchange Admins

    36/38

    Import

    Get-ContentUn Structured data

    Import-CsvStructured data

    First row = Properties Names

    All other rows are data

    Import creates the objects to work with other PowerShell cmdlets

    Microsoft Confidential36

  • 8/10/2019 PowerShell for Exchange Admins

    37/38

    Examples

    To find the number of mailboxes per database:Get-mailbox | group property database

    To find all users who are nearing or over their quota limit:Get-mailboxstatistics | where {$_.storagelimitstatus ne BelowLimit}

    To find all folders with more than 5000 items:Get-mailboxfolderstatistics | where {$_.itemsinfolder gt 5000}

    To find queues in the retry state:Get-queue | where {$_.status eg Retry}

    Get Mailbox Database SizeGet-MailboxDatabase -Status | selectServerName,Name,DatabaseSize

    Microsoft Confidential37

  • 8/10/2019 PowerShell for Exchange Admins

    38/38

    Useful Links

    http://technet.microsoft.com/en-us/scriptcenter/powershell.aspx

    http://technet.microsoft.com/en-us/scriptcenter/default

    http://gallery.technet.microsoft.com/ScriptCenter/http://www.microsoft.com/en-us/download/details.aspx?id=7097

    http://www.microsoft.com/en-

    us/download/details.aspx?id=6268http://technet.microsoft.com/en-us/library/hh848797

    http://blogs.technet.com/b/heyscriptingguy/

    http://technet.microsoft.com/en-us/scriptcenter/powershell.aspxhttp://technet.microsoft.com/en-us/scriptcenter/powershell.aspxhttp://technet.microsoft.com/en-us/scriptcenter/powershell.aspxhttp://technet.microsoft.com/en-us/scriptcenter/defaulthttp://technet.microsoft.com/en-us/scriptcenter/defaulthttp://gallery.technet.microsoft.com/ScriptCenter/http://gallery.technet.microsoft.com/ScriptCenter/http://www.microsoft.com/en-us/download/details.aspx?id=7097http://www.microsoft.com/en-us/download/details.aspx?id=7097http://www.microsoft.com/en-us/download/details.aspx?id=7097http://www.microsoft.com/en-us/download/details.aspx?id=6268http://www.microsoft.com/en-us/download/details.aspx?id=6268http://technet.microsoft.com/en-us/library/hh848797http://technet.microsoft.com/en-us/library/hh848797http://blogs.technet.com/b/heyscriptingguy/http://blogs.technet.com/b/heyscriptingguy/http://blogs.technet.com/b/heyscriptingguy/http://technet.microsoft.com/en-us/library/hh848797http://www.microsoft.com/en-us/download/details.aspx?id=6268http://www.microsoft.com/en-us/download/details.aspx?id=7097http://gallery.technet.microsoft.com/ScriptCenter/http://technet.microsoft.com/en-us/scriptcenter/defaulthttp://technet.microsoft.com/en-us/scriptcenter/powershell.aspx

Recommended