Pessoal.
Você já fez chamadas de APIs em scripts PowerShell? Saiba que utilizamos essas chamadas com muita frequência em scripts de automação. Então, nos acompanhe neste artigo e veja como é simples..
Em um caso específico, necessitávamos coletar dados de um cliente e, para não complicar muito criando um app com .Net ou ETL, fizemos um script em PowerShell para atender à necessidade.
Agora, vamos lá! Para este exemplo, vou usar a API do Azure, que retorna os dados de consumo de espaço do Azure SQL Database.
Além disso, a título de conhecimento, o Azure tem várias APIs que retorna dados e informações dos seus serviços, neste site tem a documentação de cada uma das APIs: Azure SQL Database REST API reference | Microsoft Docs para este artigo vamos usar especificamente esta API: Database Usages – List By Database – REST API (Azure SQL Database) | Microsoft Docs, que retorna informações de espaço usado e limite de espaço contratado pelo Azure SQL Database.
A chamada desta API em específico é bem simples, pois informamos 5 valores:
- Subscription: O ID da Subscription;
- ResourceGroup: O nome do grupo de recurso;
- Servers: O nome do servidor do SQL Database;
- Database: O nome do SQL Database;
- Token: O token de autenticação que é renovado frequentemente.
Os 4 primeiros itens são informados na URL da API, segue abaixo um print do Postman com a chamada da API. 
O token é informado no Header da chamada passando como uma Autenticação do tipo Bearer.

E o resultado é um JSON com as informações que desejamos:
Certo, pelo Postman a API retornou, agora vamos ao script em Power Shell. Vamos explicar parte por parte do script para ser o mais didático possível.
Primeira Parte – Conectar na subscription
Como já citado, a API necessita de um Token para autenticação e este Token tem uma validade razoavelmente curta. Por este motivo, incluímos no script a geração do Token. Assim, para cada conexão à API, geramos um novo Token, o que evita que ele expire entre uma conexão e outra.
Abaixo segue o código desta primeira parte:
Linha 2:
Utilizamos o comando Install-Module apenas se o módulo Az ainda não estiver instalado. Caso contrário, podemos ignorá-lo;
Linha 3:
Esta é obrigatório, pois ele carrega na sessão do Power Shell os comandos e recursos necessários do módulo AZ;
Linha 5, 6, 7 e 8:
São definições de variáveis que depois serão usadas na conexão com a API;
Linha 9:
Importamos a credencial. Esta credencial deve conter um e-mail e uma senha com acesso ao grupo de recurso do SQL Database. Por este motivo, utilizamos esta abordagem, pois ela impede que o usuário e a senha fiquem expostos no script. Além disso, mesmo que alguém tenha acesso ao arquivo XML, a senha permanece criptografada. Podemos falar mais sobre este assunto em outro artigo;
Linha 10:
Conectamos na Subscription do Azure, informando o Id da Subscription e também a credencial.
Segunda Parte – Gerar o token
Linha 11:
Vamos atribuir a uma variável o Contexto da Subscription que conectamos na Linha 10;
Linha 12:
Criamos uma variável de Profile, a partir da Classe de Authtentication;
Linha 13:
Atribuímos a um novo objeto do tipo RMProfileCliente usando o profile criado na Linha 12;
Linha 14:
Por fim, usamos o objeto da linha 13 para gerar o Access Token passando por parâmetro o TenantId do objeto criado na Linha 12.
Terceira Parte – Montar o Header da chamada da API
Linha 16:
Criamos um Array para realizar a chamada da API. Neste Array, definimos dois parâmetros: o Content-Type, que determina que o retorno será um JSON, e, além disso, a autorização, que utiliza um Token do tipo Bearer.
Quarta Parte – Conecta na API

Nesta quarta parte vamos efetivamente conectar e retornar os dados da API.
Linha 21:
Montagem da URL da API, como anteriormente definimos as variáveis como os valores, neste item concatenamos ao URL com as variáveis como o ID da Subscription, nome do servidor, nome banco de dados etc.
Linha 22:
Criamos outro Array para os parâmetros que a classe Invoke-RestMethod utilizará. Neste Array, definimos que a chamada será do tipo GET, informamos a URL e os Headers, que já incluem o Token.
Linha 27:
Temos a chamada propriamente dita, onde usamos o comando Invoke-RestMethod passando como parâmetros o Array definido na Linha 22. Assim, gravamos o retorno da API na variável $result.
Linha 28:
Para finalizar, gravamos o valor da variável $result em um arquivo e, assim, temos o retorno da API disponível para consumo. Claro que também podemos deserializar este resultado em uma classe, se necessário.
Espero que tenham gostado do artigo e que sejam úteis para vocês. Além disso, o exemplo usado neste artigo foi feito no PowerShell Core, que é baseado no .Net Core, então, para quem conhece e programa em .Net, deve ter sido bem fácil de entender. Por fim, adicionaremos o script completo no Github.
Até o próximo artigo.
Por Tiago Crespi e Rodrigo Crespi

