# 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.datadike.com/product-guide/configuracoes/sonar/rmm/how-to/implementar-agentes/instalacao-em-grandes-redes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
