Gerenciar licenças do Microsoft 365 Copilot em sua organização pode se tornar caro quando licenças atribuídas ficam sem uso. Sem um processo automatizado, usuários inativos retêm licenças que poderiam ser reatribuídas a funcionários ativos. Este artigo explica como criar um fluxo de recuperação de licenças usando Microsoft Entra ID, Microsoft Graph PowerShell e Azure Automation. Você aprenderá a identificar usuários inativos do Copilot, remover automaticamente suas licenças e configurar um runbook agendado para manter seu pool de licenças limpo.
Principais conclusões: Automatizando a recuperação de licenças do Copilot
- Logs de entrada do Microsoft Entra ID: Fonte de dados de inatividade do usuário usada para identificar licenças do Copilot não utilizadas.
- SDK do Microsoft Graph PowerShell: Ferramenta para consultar a atividade do usuário e remover licenças do Copilot programaticamente.
- Runbook do Azure Automation: Tarefa agendada que executa o script de recuperação diariamente ou semanalmente sem intervenção manual.
Entendendo o fluxo de recuperação de licenças do Copilot
Um fluxo de recuperação de licenças detecta automaticamente usuários que não usaram o Copilot por um período definido, remove a licença do Copilot e, opcionalmente, notifica o usuário ou seu gerente. O fluxo depende de três componentes: logs de entrada do Entra ID para medir a inatividade, um script PowerShell para processar a remoção da licença e o Azure Automation para executar o script em um agendamento. O objetivo é reduzir o desperdício de licenças, garantindo que usuários ativos mantenham o acesso. O fluxo não exclui contas de usuário nem outros serviços do Microsoft 365; ele apenas remove o SKU do Copilot da atribuição de licença do usuário.
Pré-requisitos para criar o fluxo
Antes de começar, confirme que você tem o seguinte em seu locatário do Microsoft 365:
- Função de Administrador Global ou pelo menos as funções de Administrador de Usuários e Administrador de Licenças no Entra ID.
- Assinatura do Azure com acesso para criar uma conta de Automação.
- SDK do Microsoft Graph PowerShell instalado em uma máquina local para testes iniciais do script.
- Licenças do Copilot para Microsoft 365 atribuídas a pelo menos um usuário de teste em seu locatário.
Etapas para criar o fluxo de recuperação de licenças do Copilot
Siga estas etapas para criar um fluxo de recuperação automatizado. Teste cada etapa em um ambiente que não seja de produção primeiro.
Etapa 1: Identificar o ID do SKU da licença do Copilot
- Abrir o centro de administração do Microsoft Entra
Entre em entra.microsoft.com com sua conta de Administrador Global. Vá para Identidade > Cobrança > Licenças > Todos os produtos. - Localizar o produto Copilot para Microsoft 365
Encontre o produto chamado Microsoft 365 Copilot ou Copilot para Microsoft 365. Clique nele para abrir a página de detalhes do produto. - Copiar o ID do SKU
Nos detalhes do produto, procure por ID do produto ou ID do SKU. O valor se parece comCFQ7TTC0LHBS:0001para a maioria dos locatários. Anote este ID. Você precisará dele no script PowerShell.
Etapa 2: Criar uma conta de Automação do Azure
- Entrar no portal do Azure
Vá para portal.azure.com. Pesquise por Contas de Automação na barra de pesquisa superior e selecione-o. - Criar uma nova conta de Automação
Clique em Criar. Escolha um grupo de recursos existente ou crie um novo. Insira um nome comoCopilotLicenseReclaim. Selecione a mesma região do seu locatário do Microsoft 365. Clique em Revisar + Criar e depois em Criar. - Habilitar identidade gerenciada
Após a implantação, vá para a conta de Automação. Em Configurações da conta, selecione Identidade. Defina o status Atribuída pelo sistema como Ativado. Clique em Salvar. Copie o ID do objeto (principal) exibido na mesma página.
Etapa 3: Conceder permissões à conta de Automação no Entra ID
- Abrir o centro de administração do Entra ID
Volte para entra.microsoft.com. Vá para Identidade > Aplicativos > Aplicativos empresariais. - Encontrar a entidade de serviço da automação
Pesquise pelo nome da sua conta de Automação, por exemploCopilotLicenseReclaim. Clique nela para abrir a entidade de serviço. - Atribuir permissões de API para Microsoft Graph
Em Gerenciar, selecione Permissões de API. Clique em Adicionar uma permissão. Escolha Microsoft Graph > Permissões de aplicativo. Adicione estas permissões:User.Read.All,Organization.Read.AlleUserLicense.ReadWrite.All. Clique em Conceder consentimento do administrador para seu locatário.
Etapa 4: Escrever o script PowerShell de recuperação
- Abrir a página de Runbooks da conta de Automação
No portal do Azure, vá para sua conta de Automação. Em Automação de Processos, selecione Runbooks. Clique em Criar um runbook. - Criar um novo runbook PowerShell
Insira um nome comoReclaim-CopilotLicenses. Defina Tipo de runbook como PowerShell. Defina Versão de runtime como 7.2 ou posterior. Clique em Criar. - Inserir o script de recuperação
Copie o script abaixo no editor do runbook. SubstituaYOUR_SKU_IDpelo ID do SKU da Etapa 1. Substitua30pelo limite de inatividade desejado em dias.
# Conectar usando identidade gerenciada
Connect-MgGraph -Identity
# Definir parâmetros
$skuId = "YOUR_SKU_ID"
$inactiveDays = 30
$cutoffDate = (Get-Date).AddDays(-$inactiveDays)
# Obter todos os usuários com licença do Copilot
$users = Get-MgUser -All -Property Id,UserPrincipalName,DisplayName,SignInActivity,AssignedLicenses | Where-Object {
$_.AssignedLicenses.SkuId -contains $skuId
}
$reclaimed = @()
foreach ($user in $users) {
$lastSignIn = $user.SignInActivity.LastSignInDateTime
if (-not $lastSignIn -or $lastSignIn -lt $cutoffDate) {
# Remover licença do Copilot
$licenseToRemove = @{ SkuId = $skuId }
try {
Set-MgUserLicense -UserId $user.Id -AddLicenses @() -RemoveLicenses @($skuId)
$reclaimed += $user.UserPrincipalName
Write-Output "Licença do Copilot removida de $($user.UserPrincipalName)"
} catch {
Write-Error "Falha ao remover licença de $($user.UserPrincipalName): $_"
}
}
}
Write-Output "Recuperação de licenças concluída. Total recuperado: $($reclaimed.Count)"
Etapa 5: Publicar e agendar o runbook
- Testar o runbook
Clique em Painel de teste no editor do runbook. Inicie o teste. Verifique se o script é executado sem erros e se a licença do Copilot de um usuário de teste é removida. Verifique o log de saída para obter detalhes. - Publicar o runbook
Após o teste, clique em Publicar para disponibilizar o runbook para agendamento. - Criar um agendamento
Vá para a página do runbook. Em Recursos, selecione Agendamentos. Clique em Adicionar um agendamento. Escolha uma frequência como Semanal e defina um dia e horário que evite picos de uso. Vincule o agendamento ao runbook.
Problemas comuns e limitações
Runbook falha com permissões insuficientes
Se o runbook retornar um erro de acesso negado, verifique se a identidade gerenciada tem as permissões corretas da API Microsoft Graph. Vá para o aplicativo empresarial da conta de Automação e confirme se UserLicense.ReadWrite.All foi concedida com consentimento do administrador. Confirme também que o usuário que executa o agendamento tem uma licença para atribuir.
Dados de log de entrada ausentes para alguns usuários
O Entra ID armazena logs de entrada apenas para usuários que já fizeram login pelo menos uma vez. Se um usuário nunca fez login, a propriedade LastSignInDateTime é nula. O script acima trata nulo como inativo e remove a licença. Para excluir usuários que nunca fizeram login, adicione uma condição para pular usuários com valor nulo.
Licença do Copilot reaparece após a recuperação
Se um usuário fizer parte de uma atribuição de licença baseada em grupo no Entra ID, remover a licença diretamente pode ser substituído pela política do grupo. Nesse caso, remova o usuário do grupo em vez de remover a licença. Modifique o script para usar Remove-MgGroupMember após identificar o grupo que atribui licenças do Copilot.
Recuperação manual de licenças versus fluxo automatizado
| Item | Recuperação Manual | Fluxo Automatizado |
|---|---|---|
| Esforço necessário | Alto: administrador revisa cada usuário manualmente | Baixo: executa em agendamento sem ação do administrador |
| Consistência | Propensa a erros humanos e usuários esquecidos | Lógica idêntica aplicada a cada execução |
| Notificação aos usuários | Requer e-mail separado ou mensagem manual | Pode ser adicionada ao script via Send-MgUserMail |
| Tempo de recuperação da licença | Dias ou semanas após a detecção da inatividade | Em até 24 horas após o limite ser atingido |
| Custo | Nenhum custo de infraestrutura | Custo de execução do Azure Automation (baixo) |
Agora você pode criar e implantar um fluxo de recuperação de licenças do Copilot que é executado automaticamente. Comece com um pequeno grupo de teste de usuários para validar o limite de inatividade e o comportamento do script. Estenda o fluxo adicionando notificações por e-mail usando o cmdlet Send-MgUserMail para que os usuários sejam avisados antes da remoção da licença. Para um controle mais rigoroso, considere integrar o script com sua ferramenta de gerenciamento de serviços de TI existente para criar um ticket antes da remoção da licença.