M365Con 2027 – conferência online gratuita · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Pare de desperdiçar dinheiro: como automatizar a otimização de licenças do Microsoft 365 com PowerShell

By · · Updated

Bem-vindo de volta ao blog! Se você gerencia um locatário do Microsoft 365, provavelmente conhece aquela sensação de desânimo ao abrir a fatura no fim do mês. Você vê dezenas, talvez centenas, de licenças ativas atribuídas a usuários que não fazem login desde o ano fiscal anterior. Fazer verificações manuais no portal parece produtivo, mas elas costumam deixar passar contas obsoletas, compartilham

Automatically translated with AI from the original post. Read the English original

▶ BLOGStop Wasting Money: Howto Automate Microsoft…M365.FM
Titelbild: Stop Wasting Money: How to Automate Microsoft 365 License Optimization with PowerShell

Bem-vindo de volta ao blog! Se você gerencia um locatário do Microsoft 365, provavelmente conhece aquela sensação de desânimo ao abrir a fatura no fim do mês. Você vê dezenas, talvez centenas, de licenças ativas atribuídas a usuários que não fazem login desde o ano fiscal anterior. Fazer verificações manuais no portal parece produtivo, mas elas costumam deixar passar contas obsoletas, compartilhamentos arriscados e um grande desperdício de licenças. Se você está cansado de checar o centro de administração por amostragem e de tomar sustos desagradáveis durante as auditorias trimestrais, já é hora de levar a automação para o seu dia a dia.

Neste post, vamos mergulhar em como escrever um script de PowerShell agendado que cruza os logs de entrada com as licenças ativas. Ao final deste guia, você vai entender como identificar SKUs não utilizadas, recuperar custos desnecessários todos os meses e proteger seu locatário contra o crescimento descontrolado da carga administrativa.

Introdução à otimização de licenças do Microsoft 365

A otimização de licenças costuma ser vista como uma dor de cabeça que aparece uma vez por ano. Gestores de TI correm para extrair exportações manuais, pedem aos responsáveis de departamento que confirmem se os prestadores de serviço ainda estão na empresa e tentam adivinhar se uma conta está realmente abandonada. Essa abordagem reativa garante desperdício de orçamento. Cada dia em que um prestador de serviço desligado ou um funcionário que saiu da empresa mantém uma licença E5 ou Business Premium é dinheiro que sua organização está perdendo.

Para resolver isso, precisamos tratar a otimização de licenças como um processo contínuo e automatizado. Usando o poder do PowerShell e do Microsoft Graph, podemos criar scripts que fazem o trabalho pesado por nós, entregando dados acionáveis antes mesmo de o seu café da manhã terminar de ser preparado.

Por que as verificações manuais no portal ficam aquém

Por que você não deveria simplesmente confiar no Centro de Administração nativo do Microsoft 365? O portal foi projetado para conveniência, não para governança profunda. Quando você entra na interface web, está vendo instantâneos pontuais, sem contexto histórico. O portal não permite facilmente cruzar as datas do último login com SKUs de licença específicas de milhares de usuários em uma única visão clara e digerível.

Além disso, verificações manuais dependem totalmente da memória humana. Você lembrou de verificar as contas de serviço? Conferiu se aquela caixa de correio compartilhada realmente precisa de uma licença Exchange Online Plano 2? Erros humanos geram pontos cegos, e esses pontos cegos custam dinheiro e introduzem riscos de segurança.

Escolhendo os módulos e escopos corretos do PowerShell

Antes de escrever uma única linha de lógica do script, você precisa montar seu conjunto de ferramentas. O ecossistema do PowerShell da Microsoft evoluiu, e depender de módulos legados só vai levar a avisos de descontinuação e scripts quebrados. Seu kit básico deve incluir:

Certifique-se de aplicar o princípio do privilégio mínimo ao conceder permissões aos seus scripts. Nunca use credenciais de Administrador Global em scripts automatizados.

Definindo relatórios semanais de auditoria somente leitura

A regra de ouro da automação de TI é simples: somente leitura primeiro. Nunca comece sua jornada de automação com scripts que excluam usuários ou removam licenças automaticamente. Sua primeira iteração deve focar totalmente na coleta de dados.

Configure uma programação semanal que execute uma auditoria abrangente somente leitura. Essa auditoria deve avaliar usuários inativos, listas de acesso de convidados, atribuições de licenças versus atividade real de login, configurações de caixas de correio e grupos do Microsoft 365 órfãos. Ao estabelecer um ritmo semanal, você substitui as correrias caóticas por uma revisão de dez minutos com relatórios limpos e gerados automaticamente.

Cruzando logs de entrada com licenças ativas

O segredo da otimização de licenças é o cruzamento de dados. Uma licença atribuída a uma conta de usuário não significa nada se esse usuário não se autenticou há 90 dias. Seu script precisa extrair dois conjuntos de dados principais do Microsoft Entra ID:

  1. As SKUs de licença atribuídas ao usuário.
  2. A data do último login do usuário (interativo e não interativo).

Ao combinar esses dois pontos de dados usando objetos do PowerShell, você consegue calcular de imediato o desperdício de licenças. Se o último login de um usuário ultrapassar um limite definido (como 60 ou 90 dias), o script marca essa conta como candidata à recuperação de licença.

Automatizando a entrega de relatórios e o armazenamento de artefatos

Um relatório que fica guardado silenciosamente em um diretório local não serve para nada. Você precisa levar suas conclusões diretamente às pessoas que podem tomar uma atitude. Configure seu script para gerar arquivos CSV estruturados e resumos em HTML objetivos.

Em seguida, faça o script enviar o resumo por e-mail para a lista de distribuição de governança de TI ou publicá-lo diretamente em um canal dedicado do Microsoft Teams por meio de um webhook. Além disso, armazene os arquivos CSV brutos em uma biblioteca de documentos de governança do SharePoint protegida, para manter um histórico documentado para fins de conformidade.

Agendando com segurança usando Azure Automation e Agendador de Tarefas

Onde esses scripts devem ficar? Embora seja possível executá-los a partir de uma máquina local ou de um Windows Server pelo Agendador de Tarefas, usando um repositório de credenciais seguro, a abordagem de nível empresarial é o Azure Automation.

Ao implantar seus scripts como runbooks do Azure Automation e autenticar por meio de uma identidade gerenciada, você elimina o risco de senhas fixas no código ou de segredos de entidades de serviço expirados. O Azure Automation cuida do ambiente de execução, do registro de logs e do tratamento de erros, sem complicações, na nuvem.

Implementando salvaguardas de segurança e conformidade

Automação sem salvaguardas é um desastre esperando para acontecer. Para proteger seu locatário, inclua as seguintes proteções no seu pipeline de automação:

Planejando sua estratégia de correção em fases

Não tente automatizar tudo no primeiro dia. Implante sua estratégia de correção em fases bem definidas:

Solucionando problemas comuns de automação com PowerShell

Até os melhores scripts enfrentam contratempos. Se você obtiver resultados vazios, verifique novamente as permissões do Graph e as versões dos módulos; teste a consulta no Graph Explorer para isolar o problema. Se ocorrerem falhas aleatórias, provavelmente seu script está atingindo os limites de throttling. Implemente backoff exponencial e lógica de nova tentativa para manter suas execuções estáveis. Por fim, fique atento a falsos positivos mantendo uma lista de permissões robusta para contas de serviço e contas de emergência (break-glass).

Perguntas frequentes

A automação vai quebrar meu locatário?

Não, desde que você comece em modo somente leitura, adicione aprovações e limite estritamente as permissões concedidas às contas de automação.

Preciso do Graph PowerShell agora?

Sim, ele é o caminho moderno a seguir. Use-o junto com os módulos do Exchange Online e do PnP para cobrir todas as suas superfícies administrativas.

Quão rápido podemos ver o ROI?

A primeira execução semanal geralmente revela uma quantidade impressionante de licenças não utilizadas e contas de convidados inativas, gerando oportunidades imediatas de economia.

E quanto a ambientes multi-geo ou MSPs?

Parametrize as configurações de cada locatário, centralize sua infraestrutura de logs e marque os relatórios gerados com o ID do locatário para escalar em múltiplos ambientes.

Conclusão

Automatizar a otimização de licenças do Microsoft 365 é um dos projetos de maior alavancagem que um administrador pode assumir. Ele interrompe o desperdício mensal de gastos com software, fortalece sua postura de segurança ao limpar contas inativas e libera você de verificações manuais e repetitivas no portal.

Se você quiser assistir a um passo a passo completo desses conceitos, incluindo a análise de scripts ao vivo e dicas de arquitetura mais aprofundadas, não deixe de conferir o episódio de podcast relacionado: Automate Microsoft 365 Tenant Cleanup with PowerShell. Sintonize e leve sua automação para o próximo nível hoje!

Microsoft Graph Microsoft 365 Exchange Online Microsoft 365 admin center PnP PowerShell SharePoint

Related articles

RSS