> For the complete documentation index, see [llms.txt](https://wiki.datadike.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.datadike.com/product-docs/product-guide/configuracoes/sonar/rmm/how-to/implementar-agentes/instalacao-em-grandes-redes.md).

# Instalaçāo em grandes redes

Esse script em PowerShell varre uma rede encontrando os dispositivos que respondem a ping

```
# Caminhos e credenciais
$arquivo = "sonar-agent-discover-workstation-amd64.exe"
$origem = "\\diretorio\NETLOGON\DataDike\$arquivo"
$usuario = "seulogin"
$senha = 'suasenha'

# Loop de IPs de 172.24.18.1 a 172.24.18.254
for ($i = 1; $i -le 254; $i++) {
    $DESTINO_IP = "172.24.81.$i"
    Write-Host "`n[INFO] Processando $DESTINO_IP..."

    # Verifica se a máquina responde ao ping
    $pingResult = Test-Connection -ComputerName $DESTINO_IP -Count 1 -Quiet
    if ($pingResult) {
        # Máquina online, tenta copiar e executar o arquivo
        Write-Host "[INFO] Máquina online, copiando arquivo..."

        try {
            robocopy "\\diretorio\NETLOGON\DataDike" "\\$DESTINO_IP\c$\Temp" $arquivo /R:0 /W:0 /IS | Out-Null
            Write-Host "[INFO] Arquivo copiado com sucesso para $DESTINO_IP"

            # Executar o instalador via PsExec
            Write-Host "[INFO] Executando o instalador via PsExec..."
            .\PsExec.exe \\$DESTINO_IP -u $usuario -p $senha -h -i -d "\\$DESTINO_IP\C$\Temp\$arquivo" /silent -accepteula
            Write-Host "[INFO] Instalação iniciada em $DESTINO_IP"
        }
        catch {
            Write-Warning "[ERRO] Não foi possível copiar ou executar o arquivo em $DESTINO_IP. Erro: $_"
        }
    }
    else {
        Write-Warning "[SKIP] $DESTINO_IP não está acessível."
    }
}

Write-Host "`n[INFO] Processamento concluído."

```

{% hint style="warning" %}
Como pré-requisito para paralelismo, instale o Microsoft Powershell no minimo 7.5
{% endhint %}

```
# Requer PowerShell 7+
# Caminhos e credenciais
$arquivo = "nome-do-agente.exe"                   # Nome do instalador do agente
$origem = "\\servidor\caminho\para\arquivo\$arquivo"  # Caminho de origem do arquivo
$usuario = "DOMINIO\usuario"                      # Usuário com permissão para executar remoto
$senha = 'SENHA_SECRETA'                          # Senha do usuário
$logPath = "C:\Temp\install_log.txt"              # Caminho para o arquivo de log

# Garante C:\Temp
if (!(Test-Path "C:\Temp")) {
    New-Item -ItemType Directory -Path "C:\Temp" | Out-Null
}

# Limpa log
"" | Out-File -FilePath $logPath

# Sub-redes alvo
$subredes = @(
    "172.21.12",
    "172.21.13"
    # Adicione mais sub-redes aqui
)

# Monta lista de IPs
$ips = foreach ($subrede in $subredes) {
    1..254 | ForEach-Object { "$subrede.$_" }
}

# Usa paralelismo para processar os IPs
$ips | ForEach-Object -Parallel {

    $DESTINO_IP = $_
    Write-Host "`n[INFO] Processando $DESTINO_IP..."

    $pingOutput = ping -n 1 -w 1000 $DESTINO_IP

    if ($pingOutput -match "TTL=(\d+)") {
        try {
            $ttl = [int]$matches[1]
            Write-Host "[INFO] TTL=$ttl"

            if ($ttl -ne 126) {
                Write-Host "[SKIP] TTL diferente de 126, pulando $DESTINO_IP"
                return
            }
        } catch {
            Write-Warning "[ERRO] TTL inválido em $DESTINO_IP. Pulando..."
            return
        }

        $sonarPath = "\\$DESTINO_IP\c$\Program Files\Sonar"
        if (Test-Path $sonarPath) {
            Write-Host "[SKIP] Sonar já instalado em $DESTINO_IP"
            return
        }

        Write-Host "[INFO] Copiando arquivo para $DESTINO_IP..."
        robocopy $using:origem "\\$DESTINO_IP\c$\Temp" $using:arquivo /R:0 /W:0 /IS | Out-Null

        Write-Host "[INFO] Executando PsExec..."
        .\PsExec.exe \\$DESTINO_IP -u $using:usuario -p $using:senha -h -i -d "\\$DESTINO_IP\C$\Temp\$using:arquivo" /silent -accepteula

        "$DESTINO_IP - INSTALADO em $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-File -FilePath $using:logPath -Append
    } else {
        Write-Host "[SKIP] $DESTINO_IP não respondeu ao ping"
    }

} -ThrottleLimit 10

```

### Descrição do Script de Instalação Paralela do Agente Sonar

Este script PowerShell automatiza a instalação remota do agente Sonar em múltiplas máquinas de redes específicas, utilizando recursos de paralelismo do PowerShell 7+ para acelerar o processo.

#### Principais funcionalidades:

* **Suporte a múltiplas sub-redes:** permite definir uma lista de sub-redes alvo, criando dinamicamente o conjunto de IPs a serem processados.
* **Verificação prévia via ping:** antes de tentar a instalação, o script faz um ping para cada IP, garantindo que a máquina está online e acessível.
* **Validação do TTL do ping:** o script confere o valor do TTL para validar que o dispositivo pertence à rede desejada (TTL 126).
* **Verificação se o agente já está instalado:** antes de instalar, verifica se o diretório do Sonar já existe na máquina remota para evitar instalações redundantes.
* **Cópia do instalador:** utiliza `robocopy` para transferir o instalador para a pasta temporária da máquina remota.
* **Execução remota do instalador:** usa `PsExec` para executar o instalador no computador remoto, com parâmetros para instalação silenciosa.
* **Paralelismo:** roda até 10 instalações em paralelo, acelerando o processo em redes grandes.
* **Registro em log:** mantém um arquivo de log local com o status de cada instalação, facilitando auditoria e monitoramento.

#### Requisitos:

* PowerShell 7 ou superior, para suporte ao parâmetro `-Parallel` no `ForEach-Object`.
* Permissões adequadas para acesso remoto (compartilhamentos e execução remota).
* PsExec disponível no diretório do script.
* Pasta `C:\Temp` existente ou criada automaticamente para arquivos temporários e logs.
