Office 365 - Recuperando dados de auditoria usando PowerShell

Olá a todos!
No dia a dia dos administradores, auditoria e conformidade são uma das principais prioridades.
Nesse post vou falar como recuperar dados de auditoria do Office 365 utilizando o PowerShell, mais especificamente do cmdlet Search-UnifiedAuditLog.

O Search-UnifiedAuditLog nos fornece logs de auditoria de eventos do Exchange Online, SharePoint Online, OneDrive for Business, Azure Active Directory, Microsoft Teams, Power BI, Sway e outros  serviços do Office 365.
Podemos pesquisar todos os eventos em um intervalo de datas ou aplicar filtros, com por exemplo, o usuário que executou uma ação ou um log de um determinado serviço.


Vamos a alguns exemplos:

Esse exemplo retornará os eventos de no período de 01/10/2018 a 30/10/2018. Como não informamos um horário, a hora padrão 12:00 AM (meia noite) será aplicada.
Search-UnifiedAuditLog -StartDate 10/01/2018 -EndDate 10/30/2018


Nesse exemplo pesquisamos os logs por data e horário entre 8:00 AM e 6:00 PM referente ao PowerBI.
Search-UnifiedAuditLog -StartDate "10/01/2018 8:00 AM" -EndDate "10/30/2018 6:00 PM" 
-RecordType PowerBI


O exemplo abaixo formata a o resultado por colunas, realizando os seguintes filtros:
Período: -StartDate 09/01/2018 -EndDate 10/30/2018
Serviço: PowerBI
Quantidade de registros: 50
Search-UnifiedAuditLog -StartDate 09/01/2018 -EndDate 10/30/2018 -RecordType PowerBI 
-ResultSize 50 | select recordType, CreationDate, UserIds, Operations

PS C:\>Search-UnifiedAuditLog -StartDate 09/01/2018 -EndDate 10/30/2018
-RecordType PowerBI -ResultSize 50 | select recordType, CreationDate, UserIds, Operations

RecordType   CreationDate        UserIds                     Operations
----------   ------------        -------                     ----------
PowerBIAudit 29/10/2018 23:13:24 antonio@empresa.com.br   ViewReport
PowerBIAudit 29/10/2018 23:13:24 antonio@empresa.com.br   ViewReport
PowerBIAudit 29/10/2018 21:08:22 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 21:07:18 manoel@empresa.com.br    EditDataset
PowerBIAudit 29/10/2018 21:07:11 manoel@empresa.com.br    Import
PowerBIAudit 29/10/2018 20:36:32 asilva@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 20:35:57 asilva@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 20:35:47 asilva@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 20:32:06 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 20:32:02 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 20:30:43 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 20:30:31 manoel@empresa.com.br    EditDataset
PowerBIAudit 29/10/2018 20:30:24 manoel@empresa.com.br    Import
PowerBIAudit 29/10/2018 20:00:46 asilva@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 19:59:11 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 19:59:06 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 19:58:37 manoel@empresa.com.br    EditDataset
PowerBIAudit 29/10/2018 19:58:19 manoel@empresa.com.br    Import
PowerBIAudit 29/10/2018 19:06:10 frnc@empresa.com.br      ViewReport
PowerBIAudit 29/10/2018 19:04:59 fluc@empresa.com.br      ViewReport
PowerBIAudit 29/10/2018 18:39:22 asilva@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:39:11 asilva@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:32:01 donda@empresa.com.br     ViewReport
PowerBIAudit 29/10/2018 18:31:58 botelho@empresa.com.br   ViewReport
PowerBIAudit 29/10/2018 18:17:16 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:10:58 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:10:57 botelho@empresa.com.br   EditDataset
PowerBIAudit 29/10/2018 18:10:50 botelho@empresa.com.br   Import
PowerBIAudit 29/10/2018 18:06:00 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:05:30 botelho@empresa.com.br   EditDataset
PowerBIAudit 29/10/2018 18:05:23 botelho@empresa.com.br   Import
PowerBIAudit 29/10/2018 18:03:52 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:03:49 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:03:28 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:02:32 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:02:22 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:02:21 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:01:31 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:01:23 manoel@empresa.com.br    DeleteReport
PowerBIAudit 29/10/2018 18:00:58 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 18:00:24 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 17:59:53 botelho@empresa.com.br   ViewReport
PowerBIAudit 29/10/2018 17:57:44 botelho@empresa.com.br   ViewReport
PowerBIAudit 29/10/2018 17:56:38 botelho@empresa.com.br   EditDataset
PowerBIAudit 29/10/2018 17:56:31 botelho@empresa.com.br   Import
PowerBIAudit 29/10/2018 17:53:39 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 17:53:19 fluc@empresa.com.br      UpdateFolder
PowerBIAudit 29/10/2018 17:49:47 manoel@empresa.com.br    ViewReport
PowerBIAudit 29/10/2018 17:49:01 fluc@empresa.com.br      ViewDashboard
PowerBIAudit 29/10/2018 17:49:00 fluc@empresa.com.br      ViewDashboard

PS C:\>

Se quisermos exportar o resultado para um arquivo, basta adicionar | Export-Csv -Path c:\temp\result.csv

Search-UnifiedAuditLog -StartDate 09/01/2018 -EndDate 10/30/2018 -RecordType PowerBI 
-ResultSize 50 | select recordType, CreationDate, UserIds, Operations 
| Export-Csv -Path c:\temp\result.csv



Abaixo algumas informações sobre os principais parâmetros:


-RecordType

Filtra as entradas de logs por tipo.
Os valores válidos são:
  • AzureActiveDirectory
  • AzureActiveDirectoryAccountLogon
  • AzureActiveDirectoryStsLogon
  • ComplianceDLPExchange
  • ComplianceDLPSharePoint
  • CRM
  • DataCenterSecurityCmdlet
  • Discovery
  • ExchangeAdmin
  • ExchangeAggregatedOperation
  • ExchangeItem
  • ExchangeItemGroup
  • MicrosoftTeams
  • MicrosoftTeamsAddOns
  • MicrosoftTeamsSettingsOperation
  • OneDrive
  • PowerBIAudit
  • SecurityComplianceCenterEOPCmdlet
  • SharePoint
  • SharePointFileOperation
  • SharePointSharingOperation
  • SkypeForBusinessCmdlets
  • SkypeForBusinessPSTNUsage
  • SkypeForBusinessUsersBlocked
  • Sway
  • ThreatIntelligence
  • Yammer


-ResultSize

Especifica o número máximo de relutados.
O valor padrão é 100 e o máximo é 5.000.


Para mais detalhes clique no link abaixo.
https://docs.microsoft.com/en-us/powershell/module/exchange/policy-and-compliance-audit/search-unifiedauditlog?view=exchange-ps

Por hoje é só meus amigos.
Grande abraço,

Breno Padovan





Office 365 - Obtendo informações sobre as configurações do Click to Run no registro do sistema

Salve Salve a todos!
Depois de um bom tempo sem escrever, aqui estou novamente! Firme e forte!

Nesse post vou demonstrar como obter informações da instalação do Office através das informações de registro do sistema feitos pelo Click to Run.

Mais afinal de contas, o que é esse tal de Click to Run?
A grosso modo, o Click to Run é uma alternativa ao instalador MSI, utilizado para instalar ou atualizar o Office.
O Click to Run utiliza tecnologia de streaming e permite por exemplo que usuários comecem a utilizar o Office antes mesmo que ele esteja completamente instalado ou a utilizar os aplicativos enquanto uma atualização é feita.
Quando instalamos o Office através do Click to Run, as informações são gravadas na seguinte chave de registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration

Veja abaixo como obter as informações:

PS C:\> Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration


ClientVersionToReport             : 16.0.10827.20150
ClientFolder                      : C:\Program Files\Common Files\Microsoft Shared\ClickToRun
WatcherInterval                   : 3600000
PipelineServerName                : ClickToRun_Pipeline16
VersionToReport                   : 16.0.10827.20150
ScenarioCulture                   :
InstallID                         : DC208D48-7ED2-4552-BBD6-59E488F698F8
Platform                          : x86
InstallationPath                  : C:\Program Files (x86)\Microsoft Office
ClientCulture                     : en-us
CDNBaseUrl                        : http://officecdn.microsoft.com/pr/492350f6-3a01-4f97-b9c0-c7c6ddf67d60
O365ProPlusRetail.MediaType       : CDN
UpdatesEnabled                    : True
Activate                          : True
ProductReleaseIds                 : O365ProPlusRetail,ProjectProRetail,VisioProRetail
O365ProPlusRetail.OSPPReady       : 1
StreamingFinished                 : True
RSODReset                         : False
VisioProRetail.MediaType          : CDN
VisioProRetail.OSPPReady          : 1
UpdateChannel                     : http://officecdn.microsoft.com/pr/492350f6-3a01-4f97-b9c0-c7c6ddf67d60
UpdateChannelChanged              : False
O365ProPlusRetail.EmailAddress    : breno@uptocloud.com
BackgroundTransportMethodDefault  : cachedhttp
BackgroundTransportMethodFailures : 0
ProjectProRetail.MediaType        : CDN
ProjectProRetail.OSPPReady        : 1
ProjectProRetail.EmailAddress     : breno@uptocloud.com
VisioProRetail.EmailAddress       : breno@uptocloud.com
O365ProPlusRetail.TenantId        : 4,e5d48eb7-b070-4194-bfcc-36c71d96301a
AudienceId                        : 492350f6-3a01-4f97-b9c0-c7c6ddf67d60
VisioProRetail.TenantId           : 4,e5d48eb7-b070-4194-bfcc-36c71d96301a
AudienceData                      : Production::CC
PackageLockerPath                 : C:\ProgramData\Microsoft\Office
OneDriveClientAddon               : INSTALLED
O365ProPlusRetail.OneNoteInUse    : True
PSPath                            : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Cl
ickToRun\Configuration
PSParentPath                      : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Cl
ickToRun
PSChildName                       : Configuration
PSDrive                           : HKLM
PSProvider                        : Microsoft.PowerShell.Core\Registry

PS C:\>

Um grande abraço,

Breno Padovan

Powershell - Listando todas as VMs e detalhes dos seus VHDs em um Cluster Hyper-V

Salve Salve a todos!
Já passou por um situação onde precisou listar o tamanho que os VHDs de suas VMs estão ocupando em um Cluster?
Nesse rápido post irei demonstrar como listarmos todas as VMs e detalhes dos seus respectivos VHDs em um cluster Hyper-V.
No comando abaixo iremos apresentar o path dos VHDs, o nó do cluster onde está alocado, o tipo do VHD e o seu tamanho.


 Segue exemplo:

Get-VM -ComputerName (Get-ClusterNode) |
ForEach-Object {Get-VHD -ComputerName $_.ComputerName -VMId $_.VMId} |
Select path,computername,vhdtype,@{label='Size(GB)';expression={$_.filesize/1gb -as [int]}}


Podemos também executar o mesmo comando somente em uma linha, veja o exemplo:

PS C:\> Get-VM -ComputerName (Get-ClusterNode) | ForEach-Object {Get-VHD -ComputerName $_.ComputerName -VMId $_.VMId} |
Select path,computername,vhdtype,@{label='Size(GB)';expression={$_.filesize/1gb -as [int]}}

Path                          ComputerName    VhdType   Size(GB)
----                          ------------    -------   --------
C:\ClusterStorage\VMDATA01... SRVHPV01        Fixed          127
C:\ClusterStorage\VMDATA03... SRVHPV01        Dynamic         15
C:\ClusterStorage\VMDATA03... SRVHPV01        Dynamic        458
C:\ClusterStorage\VMDATA03... SRVHPV01        Dynamic         22
C:\ClusterStorage\VMDATA03... SRVHPV01        Dynamic          4
C:\ClusterStorage\vmdata02... SRVHPV01        Dynamic         15
C:\ClusterStorage\vmdata02... SRVHPV01        Dynamic          6
C:\ClusterStorage\vmdata03... SRVHPV01        Dynamic         73
C:\ClusterStorage\vmdata03... SRVHPV01        Dynamic         18
C:\ClusterStorage\vmdata03... SRVHPV01        Dynamic         24
C:\ClusterStorage\VMDATA03... SRVHPV01        Dynamic        463
C:\ClusterStorage\VMDATA03... SRVHPV01        Dynamic        226
C:\ClusterStorage\VMDATA04... SRVHPV01        Dynamic         40
C:\ClusterStorage\VMDATA02... SRVHPV02        Dynamic         16
C:\ClusterStorage\VMDATA02... SRVHPV02        Dynamic        141
C:\ClusterStorage\VMDATA02... SRVHPV02        Dynamic         15
C:\ClusterStorage\VMDATA02... SRVHPV02        Dynamic        110
C:\ClusterStorage\VMDATA03... SRVHPV02        Dynamic        229
C:\ClusterStorage\VMDATA03... SRVHPV02        Dynamic        341
C:\ClusterStorage\VMDATA03... SRVHPV02        Dynamic        299
C:\ClusterStorage\VMDATA02... SRVHPV03        Dynamic         15
C:\ClusterStorage\VMDATA02... SRVHPV03        Dynamic        722
C:\ClusterStorage\VMDATA02... SRVHPV03        Dynamic         15
C:\ClusterStorage\VMDATA02... SRVHPV03        Dynamic        133
C:\ClusterStorage\vmdata03... SRVHPV03        Dynamic        354

PS C:\>

Exportando o resultado

Se preferir podemos exportar para um arquivo CSV ou gerar um HTML.

Exportando para arquivo CSV

Get-VM -ComputerName (Get-ClusterNode) |
ForEach-Object {Get-VHD -ComputerName $_.ComputerName -VMId $_.VMId} |
Select path,computername,vhdtype,@{label='Size(GB)';expression={$_.filesize/1gb -as [int]}} |
Export-Csv -Path C:\temp\result.csv


Exportando para um arquivo HTML

Get-VM -ComputerName (Get-ClusterNode) |
ForEach-Object {Get-VHD -ComputerName $_.ComputerName -VMId $_.VMId} |
ConvertTo-HTML -Property path,computername,vhdtype,@{label='Size(GB)';expression={$_.filesize/1gb -as [int]}} > report.html


É isso pessoal, espero que seja útil.
Abraços a todos!

Breno Padovan

Exchange Online - Gerenciando resource mailbox com PowerShell

Exchange Online - Gerenciando resource mailbox com PowerShell
Salve Salve a todos!
Nesse post irei demonstrar como utilizar o PowerShell para gerenciar resource mailbox no Exchange Online.

Mais o que é afinal de contas resource mailbox?
Em resumo é um tipo de caixa de correio usada para o gerenciamento de salas de reuniões ou equipamentos.
Existe dois tipos de Resource Mailbox: caixa de correio de sala e caixa de correio de equipamento.
Há uma pequena diferença entre as duas, mais o objetivo é o mesmo.
Mais detalhes clique aqui


Mãos a massa

Criando uma caixa de correio de Sala e Equipamento


Sintaxe:
New-Mailbox -Name "<Name>" -Room
New-Mailbox -Name "<Name>" -Equipment

PS C:\> New-Mailbox -Name "Sala 01" -Room
PS C:\>

PS C:\> New-Mailbox -Name "Projetor 01" -Equipment
PS C:\>



Ativando a reserva automática


Sintaxe:
Set -CalendarProcessing "<Identity>" -AutomateProcessing AutoAccept

PS C:\> Set-CalendarProcessing "Sala 01" -AutomateProcessing AutoAccept
PS C:\>
PS C:\> Set-CalendarProcessing "Projetor 01" -AutomateProcessing AutoAccept
PS C:\> 

Verificando:

PS C:\> Get-CalendarProcessing -Identity "Sala 01"

Identity                                                     AutomateProcessing
--------                                                     ------------------
Sala 01                                                      AutoAccept                                                 
PS C:\>


Desativando a reserva automática



PS C:\> Set-CalendarProcessing -Identity "Projetor 01" -AutomateProcessing None
PS C:\>

Verificando

PS C:\> Get-CalendarProcessing -identity "Projetor 01"

Identity                                                     AutomateProcessing
--------                                                     ------------------
Projetor 01                                                  None
PS C:\>


Atribuindo a permissão para que um usuário fique responsável por aceitar ou recusar uma reserva


PS C:\>Set-CalendarProcessing -Identity "Sala10" -AutomateProcessing AutoAccept 
-AllRequestInPolicy $true -AllBookInPolicy $false 
-ResourceDelegates "bruna@padovan112233.onmicrosoft.com"
PS C:\>

Fazendo os testes: vamos reservar uma reunião na Sala 10.

Recebemos um e-mail que a reserva está aguardando a aprovação.
Exchange Online - Gerenciando resource mailbox com PowerShell

Já o usuário que ficou responsável recebe o e-mail abaixo com as opções.


Exchange Online - Gerenciando resource mailbox com PowerShell

Confirmação que a reserva foi aceita.
Exchange Online - Gerenciando resource mailbox com PowerShell



Definindo a permissão para que somente alguns usuários possam reservar sala específica

 
Imagine que exista uma sala que somente o departamento de TI possa usa-la. Nesse caso somente alguns usuários poderão fazer a reserva, os demais usuários não terão essa permissão e a tentativa de reserva será recusada automaticamente.

PS C:\>Set-CalendarProcessing -identity "SalaTI" -AllBookInPolicy: $false 
-AllRequestInPolicy: $false -BookInPolicy "suporte@padovan112233.onmicrosoft.com" 
PS C:\>

Quando outro usuário tenta fazer uma reserva a mesma é recusada automaticamente.
Exchange Online - Gerenciando resource mailbox com PowerShell


Atribuindo a permissão de Full Access


Add-MailBoxPermission "Sala 03" -User "Dulce Feitosa" -AccessRights FullAccess

PS C:\> Add-MailBoxPermission "Sala 03" -User "Dulce Feitosa" -AccessRights FullAccess

Identity             User                 AccessRights     IsInherited Deny
--------             ----                 ------------     ----------- ----
Sala 03              LAMP152A002\Dulce... {FullAccess}     False       False


PS C:\>


Permitindo conflito de reserva usando a opção de reserva automática


PS C:\> Set-CalendarProcessing "Sala Terreo"  -AllowConflicts $True
PS C:\>


Listando Room Mailbox


PS C:\> Get-Mailbox -Filter '(RecipientTypeDetails -eq "RoomMailBox")'| Select Name, Alias

Name        Alias
----        -----
Sala 02     Sala02
Sala 03     Sala03
Sala Terreo SalaTerreo
Sala10      Sala10
SalaTI      SalaTI

PS C:\>


Listando Equipament Mailbox


PS C:\> Get-Mailbox -Filter '(RecipientTypeDetails -eq "EquipmentMailBox")'| Select Name, Alias

Name        Alias
----        -----
Projetor 01 Projetor01


PS C:\>


Alterando o prazo máximo de reserva


Por padrão o prazo máximo é de 180 dias. No exemplo abaixo alteramos para 365 dias

PS C:\> Get-MailBox "Sala10" | Set-CalendarProcessing -BookingWindowInDays 365
PS C:\>

É isso ai pessoal!
Segue alguns links com mais informações:
https://docs.microsoft.com/en-us/exchange/recipients-in-exchange-online/manage-room-mailboxes
https://docs.microsoft.com/en-us/powershell/module/exchange/mailboxes/set-calendarprocessing?view=exchange-ps

Grande abraço,
Breno Padovan

SQL Server - Verificando os últimos backups realizados

Salve Salve a todos!
No post de hoje vamos falar de SQL Server.
Uma hora ou outra precisamos ter a informação dos últimos backups realizados.
Nos scripts abaixo vamos poder verificar os últimos backups dos bancos em suas instâncias.


Mãos a massa!

Script 1 - Retorna o ultimo backup de cada database

SELECT db.Name AS DatabaseName,
COALESCE(CONVERT(VARCHAR(19), MAX(bs.backup_finish_date), 120),'None') AS LastBackUpDateTime
FROM sys.sysdatabases db
        LEFT OUTER JOIN msdb.dbo.backupset bs 
     ON bs.database_name = db.name
GROUP BY db.Name; 





Script 2 - Retorna os databases que nunca realizaram backup ou o backup atual tem mais de 24 horas.

SELECT db.Name AS DatabaseName,
COALESCE(CONVERT(VARCHAR(19), MAX(bs.backup_finish_date), 120),'None') AS LastBackUpTime
FROM sys.sysdatabases db
        LEFT OUTER JOIN msdb.dbo.backupset bs 
     ON bs.database_name = db.name
GROUP BY db.Name
HAVING max(bs.backup_finish_date) < dateadd(dd,-1,getdate())
    or max(bs.backup_finish_date) is NULL;


Abraços e boa semana!
Breno Padovan

Office 365 - Informações do fluxo de e-mail no centro de segurança e conformidade

Olá a todos!
Depois de um bom tempo sem escrever aqui estou eu novamente!
Neste post vamos falar sobre o novo painel de fluxo de e-mail do Office 365.
A Microsoft disponibilizou semana passada dia 14 de maio um novo painel com informações sobre o fluxo de e-mail, ajudando a melhorar a vida dos administradores do Office 365.

Ainda há muita coisa por vir, e serão anunciadas a medida que forem sendo disponibilizadas.

Segue abaixo um resumo desse primeira onda de recursos disponíveis.

Como acessar o Fluxo de e-mails?

No Admin Center, selecione Security & Compliance ou se preferir vá direto ao link https://protection.office.com
Já em Security & Compliance, expanda Mail flow e depois Dashboard.



Alertas de Filas

Quando os e-mails não podem ser entregues aos seus destinatários essas mensagens ficam enfileiradas e o Exchange Online continuará tentando entregar por um período de 48 horas. Após esse período, os e-mails serão devolvidos aos remetentes informando a falha (NDR).
Se o volume de enfileiramento exceder o limite predefinido que é de 2000, os alertas estarão disponíveis no painel em alertas recentes e os administradores receberão por e-mail uma notificação.




Filas

Mesmo que o volume de e-mails enfileirados não tenha excedido o limite pré-definido, o administrador poderá usar a área Filas para analisar os e-mails enfileirados por mais de uma hora..


Informações sobre encaminhamentos

Aqui temos um relatório sobre os e-mails que são automaticamente encaminhadas de dentro da organização para domínios externos.









Relatório TLS

Nesse relatório são exibidos a criptografia TLS usada na conexão para envio e recebimento dos e-mails.



Relatório dos Conectors

Exibe informações sobre envio e recebimentos dos conectores.
Podemos ver o volume de e-mails para cada conector e o uso de TLS para esses e-mails.

















Fico por aqui!
Um grande abraço,

Breno Padovan

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Olá a todos!
Como sabemos, em Cloud Computing pagamos por recursos consumidos, e as vezes temos a demanda de manter um servidor ligado somente durante o horário comercial, por exemplo.
Nesse post irei demonstrar como fazer um agendamento para iniciar e desligar uma VM automaticamente usando o Azure Automation.

O Azure Automation é um serviço de configuração e automação do Azure.

Para mais detalhes, clique aqui: https://docs.microsoft.com/en-us/azure/automation/automation-intro


Mão a massa!


O primeiro passo é criar uma conta do Azure Automation.
Pesquise por "Automation" e depois clique em "Automation Accounts" e depois "Create Automation Accounts"
Na opção "Create Azure Run As account" deixe selecione "Yes"

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation


Após o recurso ser criado, nas opções "Process Automation" selecione "Runbooks" e depois "Add a runbook"

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Na próxima tela selecione "Create a new runbook"

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Depois de criado, cole o código abaixo e depois clique em "Save"

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation


# Input Parameters for
# - VmName: name of the vm to perform action to
# - ResourceGroupName: resource group where the vm belongs to
# - VmAction:action to perform (startup or shutdown)
Param(
[string]$VmName,
[string]$ResourceGroupName,
[ValidateSet("Startup", "Shutdown")]
[string]$VmAction
)
# Authenticate with your Automation Account
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID `
-ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
# Startup VM
IF ($VmAction -eq "Startup") {
Start-AzureRmVM -Name $VmName -ResourceGroupName $ResourceGroupName
}
# Shutdown VM
IF ($VmAction -eq "Shutdown") {
Stop-AzureRmVM -Name $VmName -ResourceGroupName $ResourceGroupName -Force
}
Note que temos 3 parâmetros a serem configurados:

  1. Nome da VM
  2. Nome do grupo de recursos no qual a VM pertence
  3. Ação: Startup ou Shutodown


Testando


Podemos testar o nosso script antes de coloca-lo em produção.
Para isso clique no ícone "Test pane"

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Na próxima tela entre com os parâmetros que citamos acima e clique em "Start" 

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Abaixo o resultado do teste. Como podemos ver executou sem nenhum erro.

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation


Publicando o Runbook


O próximo passo é publicar o Runbook.
Para isso clique no botão "Publish" e depois confirme.

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Criando o agendamento


Clique em "Schedules"e depois em "Add a Schedule"

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Na tela seguinte clique em "Link a schedule to your runbook" > "Create a new schedule".
Dê um nome para o agendamento e configure o horario de Start da VM.

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

O próximo passo é configurar os parâmetros, idêntico ao que fizemos no teste.

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Repita o agendamento para o desligamento, alterando o parâmetro "VMACTION" para "Shutdown".

Visualizando a execução dos Jobs


Acessando o recurso Automation Account, podemos visualizar detalhes dos Job.

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation

Azure - Agendando o startup e shutdown de VMs usando o Azure Automation


É isso ai pessoal!

Grande abraço,

Breno Padovan 

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