O365 and PowerShell Part III (Gotchas and proposed solution)
Gotcha
The thing that occurred to me as I was connecting to each environment was the nuances, slight differences of connecting to each one. At the end of my preparation I had 4 different consoles going and an Integrated Scripting window running.
More detail on the problem
Connecting to Exchange online
- Open a PowerShell Command Prompt as an Administrator
- Create a credential
$Cred = New-Object PSCredential “UserName@o365domain.onmicrosoft.com”, (ConvertTo-SecureString “<Password>” –AsPlainText –Force)
- Create an Exchange Online Session
$exchangeSession = New-PSSession –ConfigurationName Microsoft.Exchange –ConnectionUri https://ps.outlook.com/powershell -AllowRedirect -Authentication Basic -Credential $Cred
- Import the newly created Exchange session
Import-PSSession $exchangeSession
What this whole process does is loads up in memory the Exchange online cmdlets to the current PowerShell host as well as creates a persistent connection to Exchange online so you can act upon your instance remotely.
Connecting to SharePoint Online
- Open the SharePoint Online Management Shell as an Administrator
- Create a credential
$Cred = New-Object PSCredential “UserName@o365domain.onmicrosoft.com”, (ConvertTo-SecureString “<Password>” –AsPlainText –Force)
- Connect to the SharePoint online administration site
Connect-SPOService –Url https://<o365domain>-admin.sharepoint.com –credential $Cred
This whole process does a similar thing as the Exchange Online, however the PowerShell cmdlets are already loaded in the session and available within the management console.
Connecting to Lync Online
- Open a PowerShell Command Prompt as an Administrator
- Create a credential
$Cred = New-Object PSCredential “UserName@o365domain.onmicrosoft.com”, (ConvertTo-SecureString “<Password>” –AsPlainText –Force)
- Import the Lync Online connector module
Import-Module LyncOnlineConnector
- Create an Lync Online Session
$lyncSession = New-CsOnlineSession –Credential $Cred
Import-PSSession $lyncSession
NOTE: I did have problems at one point connecting to the session, I may not have cleaned up after myself, clearing out the session and the credentials got stale. This was remedied by rebooting the machine.
Connecting to O365
- Open the Windows Azure Active Directory Module for Windows PowerShell as an Administrator
- Create a credential
$Cred = New-Object PSCredential “UserName@o365domain.onmicrosoft.com”, (ConvertTo-SecureString “<Password>” –AsPlainText –Force)
- Connect to the O365 Service
Connect-MSolService –Credential $Cred
Summary
Four different products to connect to, four slightly different ways to connect. This is what I call nuance and if I have to do something in a hurry I am less apt to do it through a scripting environment.
A Possible Solution
To ease my pain I setup my profile for the current user all hosts with some commands to get me going. Below is the script and steps to get it done
- Open PowerShell ISE as an Administrator, this may not be required, I do this out of habit.
- Create a new directory
New-Item –ItemType Directory –Path $env:UserProfile\Document\WindowsPowershell
- Create a new Profile.ps1 file
New-Item –ItemType File –Path $env:UserProfile\Document\WindowsPowershell\Profile.ps1
- Open the newly created profile in the ISE and paste the next set of scripts, changing the <Password> and <O365Domain> to your respective domains and passwords.
#region Setup Credentials
$password = ConvertTo-SecureString "<Password>" -AsPlainText -Force
# Read-host -prompt "What is the password" -AsSecureString
$Cred = New-Object pscredential "admin@<o365Domain>.onmicrosoft.com", $password # (ConvertTo-SecureString "pass@word1" -AsPlainText -Force)
#endregion
#region connections
function Connect-O365Plus {
#region Setup for O365
Import-Module msonline
Connect-MsolService -Credential $Cred
#endregion
#region Setup for SharePoint Online
Import-Module Microsoft.Online.SharePoint.Powershell
Connect-SPOService -Url https://<o365Domain>-admin.sharepoint.com -Credential $o365Cred
#endregion
#region Setup for Lync Online
Import-Module LyncOnlineConnector
$lyncSession = New-CsOnlineSession -Credential $Cred
Import-PSSession $lyncSession
#endregion
#region Setup for Exchange Online
$exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $Cred -Authentication Basic -AllowRedirection
Import-PSSession $exchangeSession
#endregion
}
function Connect-LyncOnline {
Import-Module LyncOnlineConnector
$lyncSession = New-CsOnlineSession -Credential $Cred
Import-PSSession $lyncSession
}
function Connect-ExchangeOnline {
#region Setup for Exchange Online
$exchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange `
-ConnectionUri https://ps.outlook.com/powershell `
-Credential $Cred -Authentication Basic -AllowRedirection
Import-PSSession $exchangeSession
#endregion
}
function Connect-SharePointOnline {
#region Setup for SharePoint Online
Import-Module Microsoft.Online.SharePoint.Powershell
Connect-SPOService -Url https://marcusfdemo-admin.sharepoint.com -Credential $Cred
#endregion
}
function Connect-O365 {
#region Setup for O365
Import-Module msonline
Connect-MsolService -Credential $Cred
#endregion
}
#endregion
- Save and close the ISE and now when you open up a PowerShell console as an administrator you can connect to SharePoint Online (Connect-SharePointOnline), Exchange Online (Connect-ExchangeOnline), Lync Online (Connect-LyncOnline), O365 (Connect-O365), or the entire suite (Connect-O365Plus). Without having to recall the nuances.
Hope everyone enjoys and let me know if you have any feedback.
References
Connect to Office 365 by using a single Windows PowerShell window: https://technet.microsoft.com/en-US/library/dn568015.aspx