(2) 5/13/2009. Speaker Communities Exchange User Group Europe (founder) Swiss IT Pro User Group Rewards MCP Hall of Fame . (1 of 6 worldwide). Microsoft MVP - Exchange . (1 of 120 worldwide, the only 1 in Switzerland). MCP Success Stories. Agenda Introduction Doing common tasks in Exchange Users related tasks Testing and troubleshooting Setting up your own PowerShell enviroment Additional resources 3rd party tools, web sites, communities, books, webcasts... Q&A. 2.
(3) 5/13/2009. Presentation dowlnoad This presentation will be available for download. from:. www.exchangemaster.net. Introduction How it used to be .... Problems of Scripting in Windows enviroment . . Many things could be done through command line VBScript – programming knowledge required, knowledge of VB, WMI, WBEM, ADSI, object models security voulnearable. 3.
(4) 5/13/2009. Introduction How it is today ... Scripting with PowerShell in Exchange . . Command line interface developed first, than GUI EVERYTHING can be done via command line Exchange managment GUI actually executes PowerShell commands and shows you the syntax Single line commands replace pages of VB code Symple syntax Better security – exectution of powershell scripts completely disabled by default, require scripts to be signed, etc.. Example. 4.
(5) 5/13/2009. Introduction Windows Powershell - 129 commands Get-Command Exchange Powershell – additional 394 commands Get-Excommand Don’t worry, you will be cool with approx. 20 ☺. Why are you going to love PowerShell Task example : Get a list of mailboxes and export into .csv file. 5.
(6) 5/13/2009. Why you are going to love PowerShell VBScript Dim SWBemlocator Dim objWMIService Dim colItems Dim objFSO Dim objFile strTitle="Mailbox Report" strComputer = “MyServer" UserName = "" Password = "" strLog="Report.csv" Set objFSO=CreateObject("Scripting.FileSystemObject") Set objFile=objFSO.CreateTextFile(strLog,True) strQuery="Select * from Exchange_Mailbox" Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = SWBemlocator.ConnectServer(strComputer,"\root\MicrosoftExchangeV2",UserName,Password) Set colItems = objWMIService.ExecQuery(strQuery,,48) For Each objItem In colItems objFile.writeline objItem.ServerName & "," &objItem.StorageGroupName &_ "," & objItem.StoreName & "," & Chr(34) & objItem.MailboxDisplayName Next objFile.close. Why you are going to love PowerShell PowerShell ☺. Get-mailbox | export-csv c:\report.csv. 6.
(7) 5/13/2009. .... And Action !!!. Command Syntax New-Mailbox Get-Mailbox Set-Mailbox Move-Mailbox Remove-Mailbox .... 7.
(8) 5/13/2009. Getting help List of all available PowerShell commands Get-Command List of only Exchange commands Get-Excommand Getting help about specific command Get-Help Get-Mailbox Get-Help Get-Mailbox – detailed Get-Help Get-Mailbox – full. Getting info about users/mailboxes List of all mailboxes in organisation Get-Mailbox Get-Mailbox -ResultSize unlimited. 8.
(9) 5/13/2009. Getting all available properties Get-Mailbox | Format-List Get-Mailbox –ResultSize 1 | Format-List. Getting just a list of properties names Get-Mailbox | Get-Member -MemberType *Property | Select-Object Name. 9.
(10) 5/13/2009. Selecting & Sorting Get-Mailbox | Select-Object -Property DisplayName, PrimarySMTPAddress. Get-Mailbox | Select-Object -Property DisplayName, PrimarySMTPAddress | Sort-Object -Property DisplayName. Examples • List all mailboxes, sort by name, and export into a CSV file Get-Mailbox | Sort-Object -Property Name | Export-csv c:\mailboxes.csv. • Get a list of mailboxes from Active Directory OU named Users Get-Mailbox -OrganizationalUnit Users. 10.
(11) 5/13/2009. Examples • Count mailboxes in organisation (Get-mailbox).count. Getting all properties for a specific user Get-Mailbox | where {$_.DisplayName -eq "Dejan Foro"} | format-list Who is the postmaster ? Get-Mailbox | where {$_.EmailAddresses contains "postmaster@exchangemaster.net"}. Examples Who is the user with GUID e65a6ff3-d193-4563-9a8e26a22315a686 ? Get-Mailbox | where {$_.guid -eq "e65a6ff3-d193-4563-9a8e-26a22315a686"} Who has UM extention 200 ? Get-Mailbox | where {$_.extensions contains "200"}. 11.
(12) 5/13/2009. Getting info about servers Give me a list of Exchange servers Get-Exchangeserver. Get-ExchangeServer | Select-Object -Property Name, Edition, AdminDisplayVersion, ServerRole | format-list. Examples Give me a list of mailbox servers Get-ExchangeServer | where {$_.ServerRole -ilike "*Mailbox*"}. Do we have servers running on trial version of Exchange and if yes when do they expire ? Get-ExchangeServer | where {$_.IsExchange2007TrialEdition -eq "True"} | Select-Object -Property FQDN, RemainingTrialPeriod. 12.
(13) 5/13/2009. Getting membership of a group Get-DistributionGroupMember -identity "Swiss IT Pro User Group Moderators". Managing the user lifecycle Creating users - Importing from a .csv file Modifing users – move to another database Removing mailboxes and users. 13.
(14) 5/13/2009. Importing users from a .CSV file Task Import users from a file c:\users.csv For every user . . Create user account in AD of form First.Last@exchangemaster.net Put them in Organizational Unit VIP Create a mailbox in database “Standard users” Enter his first and last name Set all users with password Password123 and require the users to change the password at first logon. Importing users from a .CSV file. Import-CSV c:\users.csv. 14.
(15) 5/13/2009. Procesing values from a csv file Processing each row of data from .CSV file Import-CSV c:\users.csv | ForEach-Object { SOME ACTION} Command for creating Users New-Mailbox Get-Help New-Mailbox –full. Processing values from .CSV file Referencing column names from the .CSV file $_.columnname Converting Password text into secure string $Password = ConvertTo-SecureString String "Password123" -asplaintext -force. 15.
(16) 5/13/2009. Importing users from a .CSV file Putted all together $Password = ConvertTo-SecureString -String "Password123" asplaintext -force Import-Csv c:\users.csv | ForEach-Object { $Name = $_.First + " " + $_.Last $UPN = $_.First + "." + $_.Last + "@exchangemaster.net" New-Mailbox -Name $Name -UserPrincipalName $UPN -Password $Password -OrganizationalUnit VIP -Database 'standard users' FirstName $_.First -LastName $_Last -ResetPasswordOnNextLogon $True}. Making changes to users Apply policies Assing to groups Enable or disable features Changing attributes Moving mailboxes ..... 16.
(17) 5/13/2009. Moving mailboxes Moving mailoboxes of users in OU VIP to a new database for VIPs Get-Mailbox -OrganizationalUnit "VIP" | Move-Mailbox -TargetDatabase "VIP users". Moving mailboxes Checking for mailbox location after move Get-Mailbox | Select-Object Name,Database. 17.
(18) 5/13/2009. Removing mailboxes Check before deleting ! Get-Mailbox -OrganizationalUnit VIP | Remove-Mailbox -WhatIf Remove them Get-Mailbox -OrganizationalUnit VIP | Remove-Mailbox. Recommendation 3rd party snap-in for better manipulation of ADobjects Quest Software . ActiveRoles Management Shell for Active Directoy. 18.
(19) 5/13/2009. Managing queues Removing spam messages from the queue Remove-Message -Filter {FromAddress -like "*spammer.com*“ } -withNDR $false. Testing Get a list of test commands Get-Command test*. 19.
(20) 5/13/2009. Testing. Script example Report on Exchange database backups with Powershell http://www.exchangemaster.net/index.php?option=com_conte nt&task=view&id=68&Itemid=57. 20.
(21) 5/13/2009. Setting up your Exchange PowerShell learning enviroment Prerequisites Supported OS . Microsoft Windows Server 2003 R2, or Microsoft Windows Server 2003 with SP1 or SP2 Windows XP with Service Pack 2 Windows Vista Windows 2008. The Microsoft .NET Framework 2.0 (2.0.50727). Powershell Exchange 2007. Setting up your Exchange PowerShell learning enviroment Alternative if you don’t want to bother: Microsoft Virtual PC Ready-made Microsoft Virtual Hard drive . Exchange 2007 Exchange 2007 SP1 beta. 21.
(22) 5/13/2009. PowerShell security and common problems for beginners How do I run PowerShell script? . When you try to run a PowerShell script from the Run dialog box or by double clicking it, the script does not execute, but opens in Notepad.. Answer: Invoke PowerShell.exe with full path to script PowerShell.exe c:\scripts\MyScript.ps1. PowerShell security and common problems for beginners. 22.
(23) 5/13/2009. PowerShell security and common problems for beginers Script blocked due to execution policy Policy Types Restricted, AllSigned RemoteSigned Unrestricted Commands Get-ExecutionPolicy Set-ExecutionPolicy Unrestricted. Setting to Unrestricted is not recommended in production. !!!. PowerShell and Common problems for beginers Problem – script will not execute if contains Exchange commands Solution - create a PowerShell profile which will load Exchange snap-ins for instructions see: FAQ 000037 - error when executing PowerShell script which contains Exchange PowerShell commands. 23.
(24) 5/13/2009. Communicating with user from the script Prompting user Write-Host -ForegroundColor red -BackgroundColor yellow "Formating your drive c: ..." Write-Host -ForegroundColor blue -BackgroundColor green "Be cool I am just kidding". Getting user input Read-Host. 3rd party editors Primal Script 2009 Autocomplete, Shows you syntax as you type List of switches Color coding Debugging Script signing with a one button click Comparing scripts Source control FTP transfer Code reusing Etc.. 24.
(25) 5/13/2009. Primal Script. Editors and enhancments Primal Script http://www.primalscript.com/ PowerShell IDE http://powershell.de/ PowerShell Analyzer www.powershellanalyzer.com PowerShell Plus http://www.powershell.com/plus/. 25.
(26) 5/13/2009. I don’t like comand line Alternatives to PowerShell Power GUI http://www.powergui.org/index.jspa AD Infinitum. http://www.newfawm.com/adi2.htm Scriptlogic. http://www.scriptlogic.com/. PowerGUI. 26.
(27) 5/13/2009. PowerGUI. PowerGUI. 27.
(28) 5/13/2009. PowerGUI. Additional Exchange resources Microsoft Exchange server web site . http://www.microsoft.com/exchange. Microsoft Exchange Team Blog (You had me at EHLO) . http://msexchangeteam.com. Technet –Microsoft Exchange Server TechCenter . http://www.microsoft.com/technet/prodtechnol/exchange/defa ult.mspx. Virtual labs . http://www.microsoft.com/technet/prodtechnol/exchange/virtu allab/default.mspx. Webcasts . http://www.microsoft.com/technet/prodtechnol/exchange/2007 /webcasts.mspx. 28.
(29) 5/13/2009. PowerShell books – Lite Frank Koch, Microsoft Switzerland German version English version. PowerShell books – medium PowerShell documentation Pack Manuals that comes with Powershell http://www.microsoft.com/downloads/details.aspx?Famil yID=b4720b00-9a66-430f-bd56ec48bfca154f&DisplayLang=en. 29.
(30) 5/13/2009. Powershell Books – Advanced. Converting VBScript Commands to Windows PowerShell Commands. http://www.microsoft.com/technet/scriptcenter/topics/winpsh/convert/default. mspx. 30.
(31) 5/13/2009. Webcasts – in German Klickst Du noch oder skriptest Du schon? Frank Röder MVP Windows Server System - Directory Services Teil 1 Windows PowerShell Einführung Teil 2 Server-Administration mit Windows PowerShell Teil 3 Exchange Server 2007 Administration mit Windows PowerShell. Websites and blogs Windows PowerShell Home. http://www.microsoft.com/windowsserver2003/technologies/management/po wershell/default.mspx. Blog of Windows Powershell team http://Blogs.msdn.com/powershell The Microsoft Exchange Team blog: http://msexchangeteam.com/default.aspx Vivek Sharma’s blog: http://www.viveksharma.com/techlog/category/scripts/ The PowerShell Guy http://thepowershellguy.com/blogs/posh/pages/powertab.aspx. 31.
(32) 5/13/2009. Websites and blogs Glen Scales development blog. http://gsexdev.blogspot.com/. Webcasts Introduction to Windows PowerShell Scripting in Exchange Server 2007 (Level 200) TechNet Webcast: 24 Hours of Exchange Server 2007 (Part 09 of 24): Using PowerShell for Exchange Management (Level 200) Microsoft Windows PowerShell Scripting for Microsoft Exchange Server 2007 (Level 300). 32.
(33) 5/13/2009. Community • PowerShell Anwendergruppe www.powershell-ag.de. Community PowerShell Live Get-Community | Where {$_.passion -eq "PowerShell”}. http://powershelllive.com. 33.
(34) 5/13/2009. Community Swiss IT Pro user group www.swisitpro.ch. Exchange User Group Europe http://www.eugeurope.org. Speakers wanted Get-speaker | where {$._passion –eq “commnunity”}. Contact dejan.foro@eugeurope.org. 34.
(35) 5/13/2009. Questions ?. Questions and Answers Q - Can powershell be used against Exchange 2003 machines ? A – yes, but not with all functionality and looks ugly http://blog.sapien.com/current/2007/2/21/managingexchange-2003-servers-with-powershell.html. 35.
(36) 5/13/2009. Questions and Answers Q – Can PowerShell be used from .NET Languages like. IronPhyton ? A – PowerShell is based on .NET framework and therefore can be embeded in other .NET languages and vice versa. Here are some examples: Using IronPython from PowerShell Part 1 : Watch folder for changes. without blocking Console http://thepowershellguy.com/blogs/posh/archive/2007/02/10/usingironpython-from-powershell-part-1-watch-folder-for-changeswithout-blocking-console.aspx Embedding PowerShell in IronPython and vice versa -- “two great tastes that taste great together” http://stevegilham.blogspot.com/2008/02/embedding-powershellin-ironpython.html. Presentation dowlnoad This presentation will be available for download. from: www.exchangemaster.net. 36.
(37) 5/13/2009. Contact: E-mail: dejan.foro@exchangemaster.net LinkedIn: http://www.linkedin.com/in/dejanforo Xing (OpenBC): http://www.xing.com/profile/Dejan_Foro. 37.
(38)