Enviando o Service Health do Office 365 por e-mail através de um script Powershell

Olá a todos!
Nesse post irei demonstrar como utilizar um script em PowerShell para envio do Service Health do Office 365 por e-mail.
Para isso, iremos precisar do módulo O365ServiceCommunications, utilizado para recuperar dados da API do Office 365 Service Comunications.


Mãos a massa


O primeiro passo é instalar o módulo O365ServiceCommunications.
Fazemos isso através do comando:

PS C:\> Install-Module -Name O365ServiceCommunications
PS C:\>

Após instalado já podemos fazer alguns testes.
Lembrando que o usuário precisa ser administrador global para executar os comandos abaixo.
Conecte ao Tenant.

PS C:\Import-Module MSOnline 
PS C:\>$O365Cred = Get-Credential 
PS C:\>$O365Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $O365Cred -Authentication Basic -AllowRedirection 
PS C:\>Import-PSSession $O365Session -AllowClobber 
PS C:\>Connect-MsolService –Credential $O365Cred
PS C:\>

No exemplo abaixo utilizamos o a função Get-SCServiceInfo, que nos retorna informações sobre os serviços disponíveis no Tenant.

PS C:\> $session = New-SCSession -Credential $Credential
PS C:\> Get-SCServiceInfo -ScSession $Session

ServiceName                             FeatureNames
-----------                             ------------
Exchange Online                         {Sign-in, E-Mail and calendar access, E-Mail timely delivery, Management and...
Office Subscription                     {Licensing and Renewal, Network Availability, Office Professional Plus Downl...
Identity Service                        {Sign-In, Administration}
Office 365 Portal                       {Portal, Administration, Purchase and Billing}
Skype for Business                      {Audio and Video, Federation, Management and Provisioning, Sign-In...}
SharePoint Online                       {Provisioning, SharePoint Features, Tenant Admin, Search and Delve...}
Dynamics 365                            {Sign In, Sign up and administration, Organization access, Organization perf...
Azure Information Protection            {Azure RMS Available}
Yammer Enterprise                       {Yammer Components}
Mobile Device Management for Office 365 {Mobile Device Management}
Social Engagement                       {Sign in, Sign up and Administration, Solution Access, Solution Performance...}
Planner                                 {Planner}
Sway                                    {Sway}
Power BI                                {PowerBI.com}
Microsoft Intune                        {Microsoft Intune}
OneDrive for Business                   {OneDrive for Business}
Microsoft Teams                         {Teams Components}
Microsoft StaffHub                      {Service and web access issues, Web client issues, Android client issues, iO...

PS C:\>

No próximo exemplo iremos exibir os eventos do Office 365 ocorridos no Tenant.
Os tipos de eventos são: Incident, Maintenance, and Message.

PS C:\> Get-SCEvent -SCSession $Session -EventTypes Incident -PastDays 7
20/02/2018 23:30:00 22/02/2018 18:22:00 IT129640 Incident  Microsoft Intune   Service restored
21/02/2018 23:00:00 22/02/2018 17:50:00 MO129664 Incident  Office 365 Portal  Service restored
22/02/2018 01:00:00 27/02/2018 00:46:00 LY129669 Incident  Skype for Business Service restored
16/02/2018 16:00:00                     PB129675 Incident  Power BI           Investigating
22/02/2018 08:00:00 23/02/2018 04:33:02 YA129706 Incident  Yammer Enterprise  Service restored
22/02/2018 20:00:00 26/02/2018 21:16:43 EX129742 Incident  Exchange Online    Service restored
23/02/2018 18:01:00 23/02/2018 21:05:00 TM129753 Incident  Microsoft Teams    Service restored
23/02/2018 23:06:47                     SP129758 Incident  SharePoint Online  Service degradation
24/02/2018 05:02:00 25/02/2018 04:00:00 PB129790 Incident  Power BI           Service restored
26/02/2018 18:14:00 27/02/2018 08:49:00 IT131023 Incident  Microsoft Intune   Service restored
23/02/2018 03:00:00 26/02/2018 19:26:17 LY131025 Incident  Skype for Business Service restored
27/02/2018 03:09:00 27/02/2018 03:40:00 TM131058 Incident  Microsoft Teams    Service restored
27/02/2018 13:10:00 27/02/2018 13:36:00 SP131064 Incident  SharePoint Online  Service restored
27/02/2018 10:00:00 27/02/2018 14:55:00 PB131067 Incident  Power BI           False positive
26/02/2018 21:30:00                     IT131084 Incident  Microsoft Intune   Investigating
27/02/2018 15:00:00                     TM131085 Incident  Microsoft Teams    Service degradation
27/02/2018 18:00:00 27/02/2018 21:05:00 YA131086 Incident  Yammer Enterprise  Service restored
27/02/2018 19:55:00 27/02/2018 20:20:00 YA131097 Incident  Yammer Enterprise  Service restored
27/02/2018 20:59:40                     IT131100 Incident  Microsoft Intune   Service degradation
PS C:\>

 

Enviando por e-mail

 

Abaixo temos um script em PowerShell onde podemos por exemplo criar uma tarefa agendada que execute diariamente e envie os incidentes ocorridos nos últimos 7 dias.

O primeiro passo é gerar um arquivo com as credenciais, que será utilizado no script para realizar a conexão.

PS C:\>Get-Credential | Export-CliXml -Path c:\scripts\cred.xml 

Abaixo o Script.
Note que no script temos a descrição do Evento.

Import-Module O365ServiceCommunications
$Credential = Import-Clixml -Path "$PSScriptRoot\cred.xml"
$MySession = New-SCSession -Credential $Credential
$Events = Get-SCEvent -EventTypes Incident -PastDays 7 -SCSession $MySession |
Select-Object Id, Status, StartTime, EndTime,
@{n='ServiceName'; e={$_.AffectedServiceHealthStatus.servicename}},
@{n='Message';e={$_.messages[0].messagetext}}
if ($Events)
{
$Tables = foreach ($Event in $Events)
{
@"
<table style="width:100%" align="left">
<tr bgcolor="#BDB76B">
<th align="left">Id</th>
<th align="left">ServiceName</th>
<th align="left">Status</th>
<th align="left">StartTime</th>
<th align="left">EndTime</th>
</tr>
<tr>
<td>$($Event.Id)</td>
<td>$($Event.ServiceName)</td>
<td>$($Event.Status)</td>
<td>$($Event.StartTime)</td>
<td>$($Event.EndTime)</td>
</tr>
</table>
<table>
<tr>
<td>$($Event.Message)</td>
</tr>
</table>
<br>
<br>
<br>
"@
}
$Html = @"
<!DOCTYPE HTML>
<html>
<Head>
</head>
<body>
<table width="841" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<th width="455" scope="row"><img src="http://www.uptocloud.com/images/logo_uptocloud_ext.png" width="455" height="178"></th>
<td></td>
<td width="386"><font face="verdana" font size="6" color="red">Office 365 Service Health Alerts</font></td>
</tr>
</tbody>
</table>
<br>
$Tables
</body>
</html>
"@
$Splat = @{
SmtpServer = 'smtp.office365.com'
usessl = $true
Port = '587'
Credential = $Credential
Body = $Html
BodyAsHtml = $true
To = 'breno@uptocloud.com'
From = 'breno@uptocloud.com'
Subject = 'Office 365 Service Health Alerts'
Priority = 'High'
}
Send-MailMessage @Splat
}


Salve em um arquivo .ps1 e crie uma tarefa agendada.

Mais informações, acesse a documentação do O365ServiceCommunications no site do PowerShell Gallery: https://www.powershellgallery.com/packages/O365ServiceCommunications/1.4


Fico por aqui.

Grande abraço,

Breno Padovan.

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Salve Salve pessoal!
Hoje vamos falar sobre como enviar convites personalizados do Azure B2B para um site do Sharepoint Online usando Powershell.

Vamos lá então.

O que é o Azure B2B?

O Azure B2B  permite que qualquer organização que use o Azure AD trabalhe com segurança com usuários de outra organização (essa organização pode ou não usar o Azure B2B), podendo fornecer acesso a documentos, aplicativos, etc mantendo o controle e segurança dos seus dados.
O B2B funciona por meio de convites via e-mail: o usuário clica no link que recebeu, faz o processo de registro e pronto.
No portal clássico do Azure existia a opção de se criar um arquivo CSV com os dados do usuário e o recurso no qual ele iria utilizar - no caso o Sharepoint, porém essa opção desapareceu...

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell
 Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Usando um script Powershell


A ideia do script é utilizar um arquivo CSV que contenha o nome e o e-mail dos usuários que irão receber o convite.
Em resumo o que o script irá fazer:
- Ler o arquivo CSV e importar os usuários para o Azure AD
- Adicionar a um grupo de segurança que estará ligado diretamente ao site do Sharepoint
- Enviar um e-mail com o link do convite e a mensagem personalizada.

Arquivo CSV

 O arquivo CSV é bem simples, segue um exemplo abaixo que iremos utilizar:

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell


 Sharepoint Online

O próximo passo é criar um grupo de segurança e adiciona-lo a permissão específica do Sharepoint.
No Azure AD acesse Usuários e Grupos > Todos os grupos > Novo Grupo

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

O próximo passo é permitir o compartilhamento externo ao site do Sharepoint:
Selecione o site, clique em Sharing e defina as propriedades conforme abaixo:

Sharepoint Online e Azure B2B - envio de convites personalizados usando PowershellSharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Agora acesse o site do Shrepoint para configurarmos as permissões:


Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Powershell

O primeiro passo é instalar o Azure AD PS module.
Esse modulo é um pré-requisito para executar vários comandos presentes no script.
https://www.powershellgallery.com/packages/AzureADPreview/2.0.0.137

Script

Abaixo o script powershell.
Faça as alterações conforme a necessidades.


#Variáveis
$groupname = 'B2B'
$project = 'Sharepoint B2B Powershell'
$projecturl = 'https://test90102030.sharepoint.com/sites/azureb2b'
$filecsv = 'C:\temp\b2b.csv'
clear
#Verifica se o arquivo CSV existe no caminho informado
if (-NOT (Test-Path $filecsv) )
{
Write-Host 'Arquivo CSV não encontrado, verifique...'
Write-Host 'Caminho informado: '$filecsv
break
}
Import-Module AzureADPreview
$cred = Get-Credential
Connect-AzureAD -Credential $cred
#Usuario Externo e Grupo de Segurança ID
$group = get-azureadgroup -SearchString $groupname | where {$_.dirsyncenabled -eq $null}
if ($group.count -ne 1) {echo "Not Exactly One Group Found"; break}
#importa as informações do arquivo CSV
Write-Host 'Adicionando os usuarios ao grupo: '$groupname
write-host "`n"
$invitations = import-csv $filecsv
foreach ($email in $invitations) {
$result= New-AzureADMSInvitation -InvitedUserEmailAddress $email.InvitedUserEmailAddress -InvitedUserDisplayName $email.Name -InviteRedirectUrl $projecturl -InvitedUserMessageInfo $messageInfo -SendInvitationMessage $false
$inviteurl = $result.InviteRedeemUrl
$userid = $result.InvitedUser.Id
try
{
#Adiciona o usuario no grupo de segurança
Add-AzureADGroupMember -objectid $group.objectid -RefObjectId $userid
Write-Host 'Adicionado: '$email.Name' - '$email.InvitedUserEmailAddress
#envia o e-mail com o convite
try
{
Send-MailMessage -To $result.InvitedUserEmailAddress -from admin@test90102030.onmicrosoft.com -Subject ‘Convite para acessar site do Sharepoint’ -Body “<h1>Convite B2B</h1><br><strong>Convite para o B2B Sharepoint</strong><br><br>Clique aqui:<br>$inviteurl <br><strong>Para qualquer ajuda</strong>, contacte: admin@test90102030.onmicrosoft.com” -BodyAsHtml -smtpserver smtp.office365.com -usessl -Credential $cred -Port 587
Write-Host 'e-mail enviado para: '$email.InvitedUserEmailAddress
write-host "`n"
} catch {
Write-Host 'Erro ao enviar o e-mail para: '$email.InvitedUserEmailAddress -ForegroundColor Red
}
} catch {
Write-Host 'O e-mail: '$email.Name' - '$email.InvitedUserEmailAddress 'já existe no grupo' -ForegroundColor Red
}
}
write-host "`n"
view raw b2b.ps1 hosted with ❤ by GitHub
 

Executando o script 

Entre com as credenciais quando solicitado e deixe que o script faça sua parte:

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

 

Aceitando o convite e acessando o site do Sharepoint

Esse é o e-mail do convite. Ele está em HTML e pode ser personalizado.

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell


Clicando no link você será redirecionado para a pagina abaixo.
Repare na nota que diz que você será redirecionado para o endereço do site do Sharepoint.
Clique em next e depois entre com as credenciais.

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell


 Note que estamos acessando um site do Sharepoint com as credenciais de outra corporação.

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Abaixo os usuários criados no Azure AD como convidados e adicionados no grupo

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell



Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

Sharepoint Online e Azure B2B - envio de convites personalizados usando Powershell

É isso pessoal.
Segue um link para complementar: https://docs.microsoft.com/pt-br/azure/active-directory/active-directory-b2b-what-is-azure-ad-b2b

Um grande abraço,
Breno Padovan