Power BI for Exchange Migrations

Are you planning or in the beginning stages of an Exchange migration?

Exchange to Exchange Online migrations are very complex. There are many factors that need to be considered, users, technical details, VIPs and project champions., etc..

My goal is to help in some areas of migrations that are constant across migrations to Exchange Online using Power BI.

How can you utilize Power BI with Exchange Migrations? First we need to start with Power BI.

Power BI is not just an application but a cloud analytics service. It allows users to visualize and analyze data quickly. It has a easy and user friendly interface that lowers the bar for entry for new users. Where things get a bit complex is when trying to sort out licensing. I have a blog post that explains at length licensing and the different versions of Power BI.

Power BI Key Features

The ability to import data from a plethora of sources, especially other non-Microsoft services, including but not limited to the following.

    • Azure Data Lake
    • Azure Cosmos
    • Azure Blob
    • Salesforce
    • Facebook
    • Dynamics
    • QuickBooks Online
    • Zendesk
    • Google Analytics
    • Excel
    • Access Databases
    • SQL/MySQL
    • PostgreSQL
    • GitHub
    • JSON
    • Folders
    • SharePoint
    • XML
    • Teradata
    • Oracle
    • IBM DB2 Database
    • IBM Informix (Beta)
    • IBM Netezza
    • Amazon Redshift
    • Google Big Query
    • OData Feed
    • R Script

 

 

 

 

 

Now to the fun stuff!

The list below contains some of the primary areas that are difficult to extrapolate but are crucial to migrations. Gaining visibility adds a level of clarity certain to ensure your migration runs smoothly. The following list is are the areas that I will be focusing on.

    • Mailbox Delegations
    • Mailbox Sizes
    • Mailbox Item Counts
    • Migration Waves

We can create basic reports that can accomplish the following.

First, we will need to export data.

Export all of the mailbox permissions with the following Exchange PowerShell code.

Get-Mailbox -ResultSize unlimited | Get-MailboxPermission | Select Identity,User,@{Name='Access Rights';Expression={[string]::join(', ', $_.AccessRights)}} | Export-Csv MailboxPermissions.csv –NoTypeInformation

Next, we export all of the mailbox sizes.

Get-Mailbox -ResultSize unlimited | Get-MailboxStatistics | Select-object DisplayName, ItemCount, @{expression={$_.TotalItemSize.Value.ToMB()};Label="SizeInMB"} | export-csv MailboxSizes.csv -Notypeinformation

Now, that we have the data we need to import it in to Power BI Desktop. There is a lot of data wrangling required. The data wrangling will vary depending on naming schemes, etc., but this Power BI template can serve as a guide. Simply download the file and change the source location of the data to where you stored the files that were created.

Prior to creating reports, you will need to download the visualizations from the Microsoft Marketplace.  I used the Bubble Chart by Akvelon and the Network Navigator Chart which is from Microsoft.

The video below will show the basic reports that you can create.

This methodology can be applied to shared mailboxes, which is what let me to developing these reports. I have an old post here. Hopefully the creativity juices are flowing and you will apply Power BI visualizations to many other areas.

How to add VLANS to Service Profiles in UCS Manager via PowerShell

We have had some unique cases where we need to add VLAN’s to a service profile’s vNic’s in the new Cisco UCS Manager. With the new HTML 5 Manager 3.1(2b) I am unable to make this change to all vNic’s templates. I have it push the change to all service profiles.

The solution was to write quick script that sets some variables, and adds the vlans to each vNic (in our case 2) for each service profile. I googled but was unable to find a quick and easy script. I decided to write my own and share it with you.

The requirements for this script to run properly are Cisco PowerTools and ensure that PowerShell remote execution is enabled.

Enjoy!

################################
# Author: Jeff Patton #
# #
# Date: 3/17/2017 #
################################

#Variables to be set by you.
$ucsserver = "172.0.0.20"
$hostsp = Import-CSV C:\Scripts\hosts.csv
$vlantoadd = "New-VLAN"
$identpoolA = "Pool-A"
$identpoolB = "Pool-B"

#Import Modules
Import-Module Cisco.UCSManager

You can create the VLAN’s via Gui or by using this script as well. If you want to create them in this script, remove the commented out sections called “VLAN Creation Section 1 and 2” in this script.

#VLAN Creation Section 1 - Connect to UCS Server
#Connect-Ucs $ucsserver -Credential (Get-Credential)

#VLAN Creation Section 2 - Optional Script to Add VLAN via CLI to Global LANCloud
#Get-UCSLanCloud | Add-VLAN -Name "DeleteMe" -Id "999"
#$vlantoadd = "DeleteMe"

#Script to Run
foreach ($part in $hostsp)
{
$sp = Get-UcsServiceProfile -Name $part.Name
$ethA = $sp | Get-UcsVnic -Name eth0 -IdentPoolName $identpoolA
$ethB = $sp | Get-UcsVnic -Name eth1 -IdentPoolName $identpoolB
$ethA | Add-UcsVnicInterface -Name $vlantoadd -Verbose
$ethB | Add-UcsVnicInterface -Name $vlantoadd -Verbose
}

Best PowerShell Exchange Health Report

Tools

There are many exchange tools on the web but this has been the most useful I have ever encountered. It provides a the bulk of what you need to know about an exchange organization. Every exchange admin should have this in their toolbox. Its called the Exchange Environment Report, it was developed by Steve Goodman Microsoft MVP.

This Report is like a Swiss Army Knife of reports.  It provides a comprehensive view on the exchange organization, from roles to database health, backup information, DAGS, mailbox counts, etc.. it includes this and more!

Enough bragging about it, you can get more information and a copy at Steve’s website or a direct download here. I would like to thank Steve for writing this awesome tool. Don’t forget to send him a message on Twitter!

 

Two step process to export a list of installed patches using PowerShell

desk-office-workspace-coworking

Building on the previous post Easy Server Inventory!

Not all businesses can afford expensive patch management solutions. Some organizations may have WSUS but not know how to use it properly or its outdated. Some of you may think SCCM can produce reports. SCCM is great when you have staff that can take advantage of it; for some its not a viable solution, because no one on staff has the skill set, price tag or a combination of time and/or money it takes to send someone to train on SCCM.

Scenario

The auditors, boss, corporate folks, etc. request a list or sample list of servers, they want to see  installed patches on each server with dates. A hefty proposition if you do not have one of these fancy applications that handle all of these things for you! No worries! Below is a quick way to keep things under control and provide the necessary information quickly and effectively.

Step 1

You can either gather a list of all servers in the domain via the AD Users and Computers, PowerShell or any other preferred method. You will use this to populate a txt file that will be used to feed the script.

Below is a script I like to use which can be useful for inventory, etc.

Export all servers to a friendly csv by running the following in PowerShell

Get-ADComputer -Filter {(OperatingSystem -Like "Windows *Server*")-and (Enabled -eq "True")} -Property * | Select Name,OperatingSystem,OperatingSystemServicePack,IPv4Address | export-csv Servers.csv -notypeinformation

*Added the (Enabled -eq "True") to filter only enabled Severs, thanks to the comment posted on Reddit by Master_apprentice .  -Thank you again

Step 2

Populate a file name servers.txt with the requested selection of servers.  Store this file in the same directory as the script below. The script below simply needs to be copied into either the PowerShell ISE or a notepad and saved as a ps1.

$ErrorActionPreference= 'silentlycontinue' # Allows the script to run in case of an error.

$servers = Get-Content -path Servers.txt  # Pulls the servers in question.

# The foreach below run the commands as the commands states for each server in the txt file.

# It then exports them to a useful csv.

foreach ($server in $servers)

{

(Get-Hotfix -ComputerName  $server | sort InstalledOn)| select CSName, Description, HotFixID, InstalledOn, RebootRequired | export-Csv -Path export.csv -append -notypeinformation

}

Once the report runs you will have a CSV with the information needed.

Easy Server Inventory using PowerShell – Minor Update

Easy Inventory with PowerShell

Ever need a quick inventory, well the following script pulls servers directly from AD. It cannot get easier than this. There is no need for fancy software or databases. Once the data is exported you can give it a facelift in excel and turn it in to the C level folks, share it with the team, your boss or perhaps you simply need a copy for yourself.

Export all servers to a friendly csv by running the following in PowerShell:

Get-ADComputer -Filter {(OperatingSystem -Like "Windows *Server*")-and (Enabled -eq "True")} -Property * | Select Name,OperatingSystem,OperatingSystemServicePack,IPv4Address | export-csv Servers.csv -notypeinformation

*Added the (Enabled -eq "True") to filter only enabled Severs, thanks to the comment posted on Reddit by Master_apprentice .  -Thank you again!

It can be saved as a script and set to automatically run as a scheduled task or use the script to feed a dataset somewhere with Power Bi, SQL, Access, etc.