none
Script installazione e configurazione SNMP ricorsivo RRS feed

  • Domanda

  • Buongiorno a tutti,

    devo effettuare l'installazione e la configurazione del servizio SNMP su molti server ed ho preparato uno script powershell per eseguire le operazioni in maniera ricorsiva prendendo da un file di testo i nomi dei vari server. All'apparenza lo script lavora ma eccetto il server dal quale viene lanciato lo script, su nessun altro viene installato il servizio. Vi allego lo script che utilizzo e chiedo a chi ne sa più di me di indicarmi l'errore. Grazie in anticipo.

    $pollers = @("XXX.XXX.XXX.XXX") # indirizzi ip Pollers (IP o DNS name) - esempio: @("monitorserv1","10.10.5.2")
     $CommunityStr = @("NOME_COMMUNITY") # nome community - esempio:  @("Secretcommunity","private2")

     Import-Module ServerManager

     #foreach ($ServerName in Get-Content .\Listaservers.txt){
        
        Enter-PSSession -ComputerName $ServerName

     #testo se SNMP VMI è installato
     $test = Get-WindowsFeature -ComputerName $ServerName -Name SNMP-Service

     #Installa/abilita SNMP-Service se il test precedente fallisce
     If ($test.Installed -ne "True") {
     Write-Host "Installo SNMP-Service su $ServerName..."
     Get-WindowsFeature -name SNMP* | Add-WindowsFeature -IncludeManagementTools | Out-Null
     }

     #ri-testo se SNMP-Service Feature è abilitato ed aggiorno le variabili
     $test = Get-WindowsFeature -Name SNMP-Service

     #scrivo le chiavi di registro se SNMP-Service è attivo
     If ($test.Installed -eq "True"){
     Write-Host "Configuro SNMP-Services con la stringa Community e gli indirizzi pollers"
     #Setto SNMP Permitted Manager(s) ** ATTENZIONE : questa operazione sovrascrive i parametri attuali **
      reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d localhost /f | Out-Null

     #Setto SNMP Traps e SNMP Community in *Read Only*
     Foreach ($String in $CommunityStr){
     reg add ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\" + $String) /f | Out-Null
     # Setto la Default value a null
     reg delete ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\" + $String) /ve /f | Out-Null
     reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\ValidCommunities" /v $String /t REG_DWORD /d 4 /f | Out-Null
     
     $i = 2
     Foreach ($manager in $pollers){
     reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\PermittedManagers" /v $i /t REG_SZ /d $manager /f | Out-Null
     reg add ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\" + $String) /v $i /t REG_SZ /d $manager /f | Out-Null
     $i++
     }
     }
     }
     #riavvio il servizio dopo averlo configurato
     Restart-Service "SNMP"
    {
     Write-Host "Configurazione completata"
     }

    giovedì 2 maggio 2019 09:45

Tutte le risposte

  • I server fanno tutti parte dello stesso dominio?
    Se utilizzi l'IP del server per il parametro ComputerName di Get-WindowsFeature è obbligatorio specificare anche le credenziali dell'account amministratore con il parametro Credential.
    giovedì 2 maggio 2019 10:39
    Moderatore
  • Si, i server sono tutti sullo stesso dominio. Come parametro del ComputerName utilizzo il nome del server che viene preso dall'elenco Listaservers.txt
    giovedì 2 maggio 2019 11:00
  • Si, i server sono tutti sullo stesso dominio. Come parametro del ComputerName utilizzo il nome del server che viene preso dall'elenco Listaservers.txt

    Lo script non può funzionare sui server remoti, ma solo sul server in cui viene eseguito: la riga che dovrebbe iterare (non è uno script risorsivo) i nomi dei server letti da Listaservers.txt è commentata

     #foreach ($ServerName in Get-Content .\Listaservers.txt)

    $pollers = @("XXX.XXX.XXX.XXX") # indirizzi ip Pollers (IP o DNS name) - esempio: @("monitorserv1","10.10.5.2")
     $CommunityStr = @("NOME_COMMUNITY") # nome community - esempio:  @("Secretcommunity","private2")
    
     Import-Module ServerManager
    
     #foreach ($ServerName in Get-Content .\Listaservers.txt){
        
        Enter-PSSession -ComputerName $ServerName
    
     #testo se SNMP VMI è installato
     $test = Get-WindowsFeature -ComputerName $ServerName -Name SNMP-Service
    #cut

    ciao


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere



    giovedì 2 maggio 2019 19:19
    Moderatore
  • Ho dimenticato di eliminare il commento. Comunque anche senza il commento, sembra che faccia qualcosa, ma in realtà a parte sul server locale non effettua nessuna installazione o configurazione.
    venerdì 3 maggio 2019 08:32
  • Verifica il corretto funzionamento di WinRM su tutti i server.
    Potrebbe esserti utile questa pagina: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_remote_troubleshooting?view=powershell-5.1
    venerdì 3 maggio 2019 14:55
    Moderatore
  • Ho dimenticato di eliminare il commento. Comunque anche senza il commento, sembra che faccia qualcosa, ma in realtà a parte sul server locale non effettua nessuna installazione o configurazione.

    Se elimini il commento lo script non funziona!

    Io eviterei il ps-remoting, temo che anche seguendo il link di Fabrizio non ne usciremo(non per colpa del Link o di Fabrizio).

    Hai almeno altre due strade alternative :

    1. Desidered State Configuration  Use DSC to Install and Maintain a SNMP Configuration  (è la soluzione più elegante se hai tanti server, presenta delle difficoltà ulteriori come ps-remoting)
    2.  modifichi lo script utilizzando l'esecuzione remota dei cmdlet

    Ho modificato il tuo script (non è testato, ho rimosso il commento chiuso il loop con la graffa mancante e aggiunto l'esecuzione remota dei comandi, se il tuo script era corretto, dovrebbe esserlo anche questo!)

    $pollers = @("XXX.XXX.XXX.XXX") # indirizzi ip Pollers (IP o DNS name) - esempio: @("monitorserv1","10.10.5.2")
    $CommunityStr = @("NOME_COMMUNITY") # nome community - esempio:  @("Secretcommunity","private2")
    $DebugPreference = 'Continue'
    Import-Module ServerManager
    
    foreach ($ServerName in Get-Content .\Listaservers.txt) {
        #testo se SNMP VMI è installato
        $test = Get-WindowsFeature -ComputerName $ServerName -Name SNMP-Service
    
        #Installa/abilita SNMP-Service se il test precedente fallisce
        If ($test.Installed -ne "True") {
            Write-DEBUG "Installo SNMP-Service su $ServerName..."
            Get-WindowsFeature -name SNMP* -ComputerName $ServerName | Add-WindowsFeature -ComputerName $ServerName  -IncludeManagementTools # -restart
        }
    
        #ri-testo se SNMP-Service Feature è abilitato ed aggiorno le variabili
        $test = Get-WindowsFeature   -ComputerName $ServerName  -Name SNMP-Service
        #scrivo le chiavi di registro se SNMP-Service è attivo
        If ($test.Installed -eq "True") {
            Write-debug "Configuro SNMP-Services con la stringa Community e gli indirizzi pollers"
            #Setto SNMP Permitted Manager(s) ** ATTENZIONE : questa operazione sovrascrive i parametri attuali **
            reg add "\\$ServerName\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d localhost /f 
    
            #Setto SNMP Traps e SNMP Community in *Read Only*
            Foreach ($String in $CommunityStr) {
                reg add "\\$ServerName\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\" + $String /f
                # Setto la Default value a null
                reg delete "\\$ServerName\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\" + $String /ve /f
                reg add "\\$ServerName\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\ValidCommunities" /v $String /t REG_DWORD /d 4 /f 
     
                $i = 2
                Foreach ($manager in $pollers) {
                    reg add "\\$ServerName\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\PermittedManagers" /v $i /t REG_SZ /d $manager /fl
                    reg add "\\$ServerName\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\TrapConfiguration\" + $String /v $i /t REG_SZ /d $manager /f
                    $i++
                }
            }
        }
        #riavvio il servizio dopo averlo configurato
        $ServiceObj = Get-Service -Name "SNMP"  -ComputerName $ServerName  -ErrorAction Stop
        Restart-Service -InputObj $ServiceObj -erroraction stop
    }
    "Configurazione completata"



    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere


    venerdì 3 maggio 2019 15:58
    Moderatore
  • Angelo619,

    ho visto che ti sei rifatto vivo nel forun, hai risolto il problema snmp? Ci puoi dare un feedback?

    Grazie Gastone


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere

    venerdì 6 dicembre 2019 20:00
    Moderatore