-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathNew-ExchangeOnlinePowershellSession.ps1
145 lines (112 loc) · 6.18 KB
/
New-ExchangeOnlinePowershellSession.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<#
.SYNOPSIS
This function creates the powershell session to Exchange Online.
.DESCRIPTION
This function uses the exchange management shell v2 to utilize modern authentication to connect to exchange online.
.PARAMETER exchangeOnlineCertificateThumbprint
The user specified thumbprint if using certificate authentication for exchange online.
.PARAMETER exchangeOnlineCredential
The user specified credential for exchange online.
.PARAMETER exchangeOnlineOrganiationName
The onmicrosoft.com organization name.
.PARAMETER exchangeOnlineAppID
The appilcation ID created in Azure for exchange online management.
.PARAMETER exchangeOnlineEnvironmentName
The Exchange online environment name if a non-commercial tenant is required.
.OUTPUTS
Powershell session to use for exchange online commands.
.EXAMPLE
New-ExchangeOnlinePowershellSession -exchangeOnlineCredentials $cred
New-ExchangeOnlinePowershellSession -exchangeOnlineCertificate $thumbprint
#>
Function New-ExchangeOnlinePowershellSession
{
[cmdletbinding()]
Param
(
[Parameter(ParameterSetName = "UserCredentials",Mandatory = $false)]
[pscredential]$exchangeOnlineCredentials,
[Parameter(ParameterSetName = "CertificateCredentials",Mandatory = $true)]
[string]$exchangeOnlineCertificateThumbPrint,
[Parameter(ParameterSetName = "CertificateCredentials",Mandatory = $true)]
[string]$exchangeOnlineAppID,
[Parameter(ParameterSetName = "CertificateCredentials",Mandatory = $true)]
[string]$exchangeOnlineOrganizationName,
[Parameter(ParameterSetName = "UserCredentials",Mandatory = $true)]
[Parameter(ParameterSetName = "CertificateCredentials",Mandatory = $true)]
[string]$exchangeOnlineEnvironmentName,
[Parameter(ParameterSetName = "UserCredentials",Mandatory = $true)]
[Parameter(ParameterSetName = "CertificateCredentials",Mandatory = $true)]
[string]$debugLogPath,
[Parameter(ParameterSetName = "UserCredentials",Mandatory = $false)]
[Parameter(ParameterSetName = "CertificateCredentials",Mandatory = $false)]
[boolean]$isAudit=$FALSE
)
#Output all parameters bound or unbound and their associated values.
write-functionParameters -keyArray $MyInvocation.MyCommand.Parameters.Keys -parameterArray $PSBoundParameters -variableArray (Get-Variable -Scope Local -ErrorAction Ignore)
#Define variables that will be utilzed in the function.
[string]$exchangeOnlineCommandPrefix="O365"
[boolean]$isCertAuth=$false
#$exchangeOnlineCommands=@('get-ExoRecipient','new-distributionGroup','get-recipient','set-distributionGroup','get-distributionGroupMember','get-mailbox','get-unifiedGroup','set-UnifiedGroup')
#Initiate the session.
Out-LogFile -string "********************************************************************************"
Out-LogFile -string "BEGIN NEW-EXCHANGEONLINEPOWERSHELLSESSION"
Out-LogFile -string "********************************************************************************"
#Log the parameters and variables for the function.
if ($exchangeOnlineCredentials -ne $NULL)
{
Out-LogFile -string ("ExchangeOnlineCredentialsUserName = "+$exchangeOnlineCredentials.userName.tostring())
out-logfile -string ("Is certificate auth = "+$isCertAuth)
}
elseif ($exchangeOnlineCertificate -ne "")
{
Out-LogFile -string ("ExchangeOnlineCertificate = "+$exchangeOnlineCertificateThumbPrint)
out-logfile -string ("ExchangeAppID = "+$exchangeOnlineAppID)
out-logfile -string ("ExchangeOrgName = "+$exchangeOnlineOrganizationName)
$isCertAuth=$true
out-logfile -string ("Is certificate auth = "+$isCertAuth)
}
Out-LogFile -string ("ExchangeOnlineCommandPrefix = "+$exchangeOnlineCommandPrefix)
if ($isCertAuth -eq $False)
{
if ($exchangeOnlineCredentials -ne $NULL)
{
try
{
Out-LogFile -string "Creating the exchange online powershell session."
Connect-ExchangeOnline -Credential $exchangeOnlineCredentials -prefix $exchangeOnlineCommandPrefix -exchangeEnvironmentName $exchangeOnlineEnvironmentName -EnableErrorReporting -LogDirectoryPath $debugLogPath -LogLevel All
}
catch
{
Out-LogFile -string $_ -isError:$TRUE -isAudit $isAudit
}
}
else
{
try
{
Out-LogFile -string "Creating the exchange online powershell session."
Connect-ExchangeOnline -prefix $exchangeOnlineCommandPrefix -exchangeEnvironmentName $exchangeOnlineEnvironmentName -EnableErrorReporting -LogDirectoryPath $debugLogPath -LogLevel All
}
catch
{
Out-LogFile -string $_ -isError:$TRUE -isAudit $isAudit
}
}
}
elseif ($isCertAuth -eq $TRUE)
{
try
{
out-logfile -string "Creating the connection to exchange online powershell using certificate authentication."
connect-exchangeOnline -certificateThumbPrint $exchangeOnlineCertificateThumbPrint -appID $exchangeOnlineAppID -Organization $exchangeOnlineOrganizationName -exchangeEnvironmentName $exchangeOnlineEnvironmentName -prefix $exchangeOnlineCommandPrefix -EnableErrorReporting -LogDirectoryPath $debugLogPath -LogLevel All
}
catch
{
out-logfile -string $_ -isError:$TRUE -isAudit $isAudit
}
}
Out-LogFile -string "The exchange online powershell session was created successfully."
Out-LogFile -string "END NEW-EXCHANGEONLINEPOWERSHELLSESSION"
Out-LogFile -string "********************************************************************************"
}