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

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

Atualizado

Isto foi útil?