Criando usuários via CLI Windows
Tags: veracode, beginners, tutorial, powershell
Published: 2023-01-27 17:01:26

Antes de começarmos, precisamos ter nossas [credenciais](https://dev.to/m3corp/credenciais-da-veracode-340m) da Veracode, e nesse caso, precisamos que seja de um usuário com as [roles](https://docs.veracode.com/r/c_role_permissions) para criar usuários.

A ideia do script e pegar uma lista de usuários, que vão estar organizados em um arquivo CSV formatado por linhas e com as colunas:
- Nome
- Sobrenome
- Email

Nosso script vai receber o caminho desse CSV e utilizar o Wrapper para fazer a criação deles, pegando cada uma das linhas com valores. 
Além das ferramentas da Veracode, vamos utilizar em especial o comando Foreach do Powershell, junto a função Import-Csv para tratar os valores. 
Colocando isso em código, teremos:

```
# Recebe o caminho do CSV, que precisa estar no formado:
# Nome, Sobrenome, Email
param (
        [parameter(position=0,Mandatory=$True)]
        $caminhoListaUsuarios
    )

# Configura a ferramenta para uso
$pastaVeracode = "D:\Veracode" # O caminho da pasta onde tem as ferramentas da Veracode
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";$pastaVeracode")

# Configurações
$roles = "Greenlight IDE User,Security Insights,Reviewer,Submitter"

# Faz a configuração do Header
$Header = 'Nome', 'Sobrenome', 'Email'

# Faz a criação dos usuários conforme lista
$listaUsuarios = Import-Csv -Path $caminhoListaUsuarios -Header $Header -Delimiter ","
foreach ($usuario in $listaUsuarios) {
    try {
        # Faz o tratamento das informações
        $nome = $usuario.Nome
        $sobrenome = $usuario.Sobrenome
        $email = $usuario.Email

        # Cria um novo usuário
        VeracodeAPI.exe -action createuser -firstname "$nome" -lastname "$sobrenome" -emailaddress "$email" -roles $roles
        # Log de retorno e criação dos usuários
        Write-Host "Usuário: $nome $sobrenome"
        Write-Host "Email: $email"
    }
    catch {
         # Recebendo o erro e exibindo ele, parando a execução
         $ErrorMessage = $_.Exception.Message # Recebe o erro
         # Mostra uma mensagem personalizada
         Write-Host "Erro ao criar o usuário: $nome $sobrenome"
         Write-Host "$ErrorMessage"
    }
    
}
```

Como todos os usuários precisam ter roles, a ideia foi deixar predefinidas algumas que normalmente são utilizadas, nesse caso por usuários com um perfil de acessar a plataforma para fazer análises e pegar resultados, e também que utilize as ferramentas de análise na IDE. 
Caso tenha necessidades diferentes, pode alterar essa lista.

**E para o caso de times?**
Caso a ideia já seja criar esses usuários em um time, nosso script só precisa de duas alterações: 

- Adicionar o nome do time como parâmetro 
- Passar ele para o Wrapper

Com essas modificações, nosso script vai ficar:
```
# Recebe o caminho do CSV, que precisa estar no formado:
# Nome, Sobrenome, Email
param (
        [parameter(position=0,Mandatory=$True)]
        $nomeTime,
        [parameter(position=1,Mandatory=$True)]
        $caminhoListaUsuarios
    )

# Configura a ferramenta para uso
$pastaVeracode = "D:\Veracode" # O caminho da pasta onde tem as ferramentas da Veracode
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";$pastaVeracode")

# Configurações
$roles = "Greenlight IDE User,Security Insights,Reviewer,Submitter"

# Faz a configuração do Header
$Header = 'Nome', 'Sobrenome', 'Email'

# Faz a criação dos usuários conforme lista
$listaUsuarios = Import-Csv -Path $caminhoListaUsuarios -Header $Header -Delimiter ","
foreach ($usuario in $listaUsuarios) {
    try {
        # Faz o tratamento das informações
        $nome = $usuario.Nome
        $sobrenome = $usuario.Sobrenome
        $email = $usuario.Email

        # Cria um novo usuario
        VeracodeAPI.exe -action createuser -firstname "$nome" -lastname "$sobrenome" -emailaddress "$email" -roles $roles -teams $nomeTime
        # Log de retorno e criação dos usuários
        Write-Host "Usuário: $nome $sobrenome"
        Write-Host "Email: $email - Time: $nomeTime"
    }
    catch {
         # Recebendo o erro e exibindo ele, parando a execução
         $ErrorMessage = $_.Exception.Message # Recebe o erro
         # Mostra uma mensagem personalizada
         Write-Host "Erro ao criar o usuário: $nome $sobrenome"
         Write-Host "$ErrorMessage"
    }
    
}
```