Scripting Exchange: The Exchange Management Shell

1 / 32
About This Presentation
Title:

Scripting Exchange: The Exchange Management Shell

Description:

Title: Spring 2006 Connections Conference Template Author: Erik Ruthruff Last modified by: Jim McBee Created Date: 2/3/2003 10:16:31 PM Document presentation format – PowerPoint PPT presentation

Number of Views:0
Avg rating:3.0/5.0
Slides: 33
Provided by: ErikRu3

less

Transcript and Presenter's Notes

Title: Scripting Exchange: The Exchange Management Shell


1
Scripting Exchange The Exchange Management Shell
  • Jim McBee
  • http//www.ithicos.com

2
Who is Jim McBee!!??
  • Consultant, Writer, MCSE, MVP and MCT Honolulu,
    Hawaii
  • Principal clients (Dell, Microsoft, SAIC, Servco
    Pacific)
  • Author Exchange 2003 Advanced Administration
    (Sybex)
  • Contributor Exchange and Outlook Administrator
  • Blog
  • http//mostlyexchange.blogspot.com
  • http//www.directory-update.com

3
Introduction
  • PowerShell 101
  • PowerShell and Exchange 2003
  • PowerShell and Exchange 2007
  • Faceoff PowerShell vs Old-School Scripting
  • Cool PowerShell One-Liners

4
PowerShell 101
  • Flexible, object-oriented command shell
  • Supplements other scripting methods
  • CMD.exe
  • VBScript
  • WMI
  • CDO / CDOEX / CDOEXM
  • Extensions can be accessed via .NET classes
  • Can be used for one-off commands or to write
    scripts and applications

5
PowerShell 101 Why?
  • Why is Microsoft doing this?
  • Composition and pipelining
  • Richer functionality
  • Make the command line better than UNIX
  • Provide secure remote scripting
  • Provide better batching (one-to-many)
  • Automate and repeat anything you can do through
    the GUI

6
PowerShell 101 Vocabulary
  • Cmdlet
  • Base PowerShell object that takes input, does
    something to it, and produces output
  • Base set of cmdlets provided with PowerShell
  • Exchange 2007 adds its own Exchange-specific
    cmdlet set
  • You can write your own!

7
PowerShell 101 Vocabulary
  • Cmdlets follow a standard verb-object naming
    structure
  • Get-XXX fetches an object or its properties
  • New-XXX creates something
  • Set-XXX sets a property on an object
  • Format-XXX displays object properties in a given
    format
  • 120 built-in cmdlets in default PowerShell
    install
  • Exchange adds its own rich set of
    Exchange-specific cmdlets

8
Demo Introduction to the PowerShell
  • Verb-Noun combinations
  • Verbs Get, Set, New, Delete, Mount, Disable
  • Nouns User, Mailbox, MailboxServer,
    TransportServer, Database, Contact,
    DistributionGroup, ActiveSyncPolicy
  • Not case sensitive
  • Tab completion
  • Complete cmdlets and parameters
  • Getting help
  • Help mailbox, Help mailbox
  • Get-Mailbox -?
  • Get-Help Get-Mailbox Full
  • Get-Help Get-Mailbox Example
  • We can view the properties used by a cmdlet
  • Get-Mailbox Get-Member MemberType Properties
  • Get-Mailbox Lee Adama Format-List
  • Output
  • Outputs to the screen text
  • Output to the shell is objects

9
PowerShell Exchange 2003
  • If youre running Exchange 2003, you can still
    use PowerShell
  • Install .NET Framework 2.0
  • Install PowerShell beta 3 or later
  • What can you do with it? Plenty!
  • Service management and control
  • WMI monitoring
  • WMI property setting

10
PowerShell in Exchange 2007
  • PowerShell is the core of Exchange Management
    Console
  • All EMC actions really call PowerShell cmdlets
  • All those cmdlets are available from the command
    line
  • Dont let the cmdlet idea fool you
  • Some Exchange cmdlets are extremely rich, e.g.
    move-mailbox
  • Many cmdlets compress big functionality into one
    line

11
Faceoff
  • There are lots of things that you can do with
    Exchange 2003 WMI/CDOEXM
  • Let's look at a few examples and their PowerShell
    equivalents

12
Mailbox-Enabling a User
  • ' get the default and config NC names
  • Set oIADS GetObject("LDAP//RootDSE")
  • strDefaultNC oIADS.Get("defaultnamingcontext")
  • strConfigNC oIADS.Get("configurationNamingContex
    t")
  • strContainer "/CNUsers," strDefaultNC
  • Set objContainer GetObject("LDAP//"
    strDCName strContainer)
  • ' find the target user and connect to it
  • Set oIADSUser GetObject("LDAP//Joe
    User,CNUsers," strDefaultNC)
  • Set oMailBox oIADSUser
  • Set oConnection CreateObject("ADODB.Connection")
  • set oCommand CreateObject("ADODB.Command")
  • Set oRecordSet CreateObject("ADODB.Recordset")
  • oConnection.Provider "ADsDSOObject"
  • oConnection.Open "ADs Provider"

13
Mailbox-Enabling a User
  • ' Build the query to find the private MDBs. Use
    the first one if any are found.
  • strQuery "ltLDAP//" strConfigNC _
  • "gt(objectCategorymsExchPrivateMDB)name,adsp
    athsubtree"
  • oCommand.ActiveConnection oConnection
  • oCommand.CommandText strQuery
  • Set oRecordSet oCommand.Execute
  • If Not oRecordSet.EOF Then
  • oRecordSet.MoveFirst
  • firstMDB CStr(oRecordSet.Fields("ADsPath").Valu
    e)
  • Else
  • firstMDB ""
  • End If
  • ' create the mailbox
  • oMailbox.CreateMailbox firstMDB
  • oIADSUser.SetInfo

14
EMS Mailbox-Enabling a User
  • Enable-Mailbox "domain\JoeUser" "BATMAN\First
    Storage Group\UserMDB01"
  • Note that you could also do this on many users at
    once, e.g.
  • Get-DistributionGroupMember "New Hires"
    Enable-Mailbox "BATMAN\First Storage
    Group\UserMDB01"

15
Turning on OWA Attachment Blocking
  • ' ------ SCRIPT CONFIGURATION ------
  • strOWA "HKEY_LOCAL_MACHINE\System\CurrentControl
    Set\Services\"
  • strOwa strOWA "MSExchangeWeb\OWA\"
  • strBlockList "pst, tmp, pl, exe, cmd, pif, bat,
    msh"
  • ' ------ END CONFIGURATION ---------
  • Set objWSH wscript.CreateObject("WScript.Shell")
  • objWSH.RegWrite strOWA, "Level1FileTypes","REG_SZ"
    , strBlockList
  • Run this on each Exchange 2003 server

16
EMS Turning on OWA Attachment Blocking
  • Get-OWAVirtualDirectory Set-OWAVirtualDirectory
    -BlockedFileTypes ".PST"
  • Note that this sets the parameter on all the OWA
    instances in your organization, at once, with no
    extra steps!

17
Cool EMS One-Liners
  • Get the number of user mailboxes for each
    database
  • Get-MailboxStatistics Group MailboxDatabase
    Format-Table count,name

18
Cool EMS One-Liners
  • Which mailboxes are in a given database?
  • Get-Mailbox Group Database Format-List
  • Lists each MDB and shows you which users are in
    each database

19
Stop and Think
  • It should be clear what get-service does
  • Take a look at this demo

20
Cool EMS One-Liners
  • Mass-set properties on all members of a group
  • Get-DistributionGroupMember "Executives"
    Set-Mailbox -SendStorageQuota 500000

21
Cool EMS One-Liners
  • Find all files created on a certain day and move
    them
  • dir .eml where _.LastWriteTime like 04/02
    move-item destination c\oldSpam
  • You can just as easily remove them, rename them,
    or do other things

22
Cool EMS One-Liners
  • Mailbox-enable every user in an OU
  • Get-User -OrganizationalUnit gotham.ci.us/PublicS
    afety" Where _.RecipientType -eq "user"
    Enable-Mailbox -database BATMAN\Gotham\Gotham
    PD"

23
Cool EMS One-Liners
  • Retry any message queue that has more than 50
    pending messages
  • get-queue where-object _.MessageCount -gt
    50 retry-queue

24
More One-Liners
  • Output (output) of some cmdlets can be piped to
    another cmdlet to be used as input
  • This allows the creation of one-liners
  • Get-MailboxStatistics where _.DatabaseName
    eq Mailbox Database Format-Table
    DisplayName, ItemCount, TotalItemSize,StorageLimit
    Status
  • Get-Mailbox Lee.Adama Set-Mailbox
    ProhibitSendQuota75000KB
  • Get-DistributionGroupMember Raptor Pilots
    Move-Mailbox TargetDatabase Raptor Pilots
  • Get-DistributionGroupMember Raptor Pilots
    Set-Mailbox IssueWarningQuota100MB
    ProhibitSendQuota125MB ProhibitSendReceiveQuot
    a150MB UseDatabaseQuotaDefaultsFalse

25
Demo Creating Users and Mailboxes
  • Creating a text file
  • Name,Database,OrganizationalUnit,UserPrincipalName
  • Saul Tigh,Mailbox Database,colonialfleet.local/Eng
    ineering,Saul.Tigh_at_colonialfleet.local
  • Sharon Agathon,Mailbox Database,colonialfleet.loca
    l/Engineering,Sharon.Agathon_at_colonialfleet.local
  • Tom Zarek,Mailbox Database,colonialfleet.local/Eng
    ineering,Tom.Zarek_at_colonialfleet.local
  • Laura Roslin,Mailbox Database,colonialfleet.local/
    Engineering,Laura.Roslin_at_colonialfleet.local
  • Samuel Anders,Mailbox Database,colonialfleet.local
    /Engineering,Samuel.Anders_at_colonialfleet.local
  • Script to read this text file and create users
  • Users Import-Csv C\Demo\newaccounts.txt
  • Users
  • Password Read-Host Please enter a password
    for the users AsSecureString
  • Foreach (User in Users)
  • New-Mailbox
  • -Name User.Name
  • -Database User.Database
  • -OrganizationalUnit User.OrganizationalUnit
  • -UserPrincipalName User.UserPrincipalName
  • -Password Password

26
EMS Cmdlet What It Does
  • get-mailbox -server CT-EXCH-MBX-01
    move-mailbox targetdatabase SG1\Executives
  • Get all mailboxes on the mailbox server named
    CT-EXCH-MBX-01 and pipe this list to the next
    command
  • get-mailbox -server CT-EXCH-MBX-01
  • Move each mailbox in this list to the Executives
    database in the SG1 storage group
  • move-mailbox targetdatabase
    SG1\Executives

27
More EMS Examples
  • Get-Mailbox -server CT-EXCH-MBX-01
    Move-Mailbox -targetdatabase SG1\Executives
  • Get-DistributionGroupMember Engineering
  • Get-DistributionGroupMember Engineering"
    Get-Mailbox -IssueWarningQuota1500MB
  • Get-DistributionGroupMember Engineering"
    Get-Mailbox Format-Table name,issuewarningquota

28
SP1 Management Improvements
  • Service Pack 1 includes some major EMC
    improvements
  • Public folder management tools
  • POP / IMAP server management tools
  • Clustered mailbox server management
  • There are EMS improvements as well
  • Import and export mailboxes to PST!
  • Improved tools for bulk mailbox manipulation
  • Some syntax improvements

29
PowerShell Tricks to Know
  • Get-command -synopsis will give you all flags for
    the specified cmdlet
  • Get-command -name get-service -synopsis
  • Get-excommand can be used to search for
    Exchange-specific commands
  • Get-ExCommand ailbox where .Name -eq
    Cmdlet tells you what command exist
  • Follow up by piping the cmdlet name to get-member
  • Get-MailboxServer Get-Member -MemberType
    property to get a list of properties

30
For more information
  • Exchange Ninjas
  • http//www.exchangeninjas.com
  • Visit the Exchange 2007 home page
  • http//www.microsoft.com/exchange/
  • Exchange Team blog
  • http//msexchangeteam.com
  • Exchange 2007 Documentation
  • http//go.microsoft.com/fwlink/?LinkId69434

31
Where to Learn More
  • Exchange 2007 online help canonical source for
    what Exchange cmdlets do
  • PowerShell team blog
  • http//blogs.msdn.com/PowerShell
  • Vivek Sharma's blog
  • http//viveksharma.com/techlog
  • Exchange Ninjas
  • http//www.exchangeninjas.com

32
Where to Learn More
  • PowerShell (Oakley O'Reilly Media ISBN
    0-596-10009-4)
  • Quick, light intro no Exchange content
  • Windows PowerShell in Action (Payette Manning
    Publications ISBN 1-932-39490-7)
  • Written by the lead designer of PowerShell
  • PowerShell TFM (Jones Hicks SAPIEN Press
    0-977-65972-0)
  • Written by Windows scripting gurus Don Jones
    Jeffrey Hicks

33
Questions?
  • Thanks for attending!

34
Book giveaway and e-mail notice
  • Please give me a piece of paper with your name
    for drawing
  • Include your e-mail address or give me a business
    card if you want
  • 20 discount code for Directory Update software
  • Notification e-mail when Mastering Exchange
    Server 2007 is available
  • Keep an eye out for Mastering Exchange Server
    2007 Due out in late April

35
Your Feedback is Important
  • Please fill out a session evaluation form and
    either put them in the basket near the exit or
    drop them off at the conference registration
    desk.
  • You could win one of 10 subscriptions to
  • TechNet Plus Direct The essential resource for
    IT Professionals .
  • Winners will be drawn and names will be posted
    Tuesday morning from Monday evals, Wednesday
    morning from Tuesday evals, and during closing
    session from Wendesday evals. Include your badge
    number on your session eval so we can figure out
    the winners!
  • Thank you!
Write a Comment
User Comments (0)