shared.ps1
<#
.SYNOPSIS Connect EXO with user name and password. It is not suggested to use basic auth as it explicitly write user name and password, which is unsafe. If possible, use Connect-ExchangeOnline instead. .DESCRIPTION Start EXO PowerShell session. .EXAMPLE PS C:\>Connect-ExoWithBasicAuth -User "admin@contoso.com" -Pass "_password_" #> function Connect-ExoWithBasicAuth { param ( [Parameter(Mandatory=$true)] [string]$User, [Parameter(Mandatory=$true)] [string][string]$Pass ) process { $p = ConvertTo-SecureString -String $Pass -AsPlainText -Force $Creds = [System.Management.Automation.PSCredential]::new($User, $p) $PsUrl = "https://outlook.office365.com/powershell-liveid/" $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $PsUrl -Credential $Creds -Authentication Basic -AllowRedirection Import-PSSession $Session } } function Get-ExoConnection() { if (!(Get-Command "Get-Mailbox*")) { if (!(Get-Module -Name ExchangeOnlineManagement)) { if (Get-Module -ListAvailable -Name ExchangeOnlineManagement) { Import-Module ExchangeOnlineManagement } else { throw "Module ExchangeOnlineManagement not installed. Please install it from PowerShell Gallery, or use Basic Auth to connect EXO instead." } } Connect-ExchangeOnline } } function Write-Log($obj, [string]$path, [switch]$toConsole) { if (-not $obj) { return } $folder = Split-Path -Path $path if ($folder -and !(Test-Path -Path $folder)) { $null = New-Item -ItemType Directory -Path $folder } if ($obj.GetType() -eq [string]) { $text = $obj } else { $text = $obj|Format-List *|Out-String } Add-Content -Path $path -Value $text if ($toConsole) { Write-Host $text } } |