Рекурсивный скрипт установки и настройки SNMP - PullRequest
0 голосов
/ 02 мая 2019

Мне нужно установить и настроить службу SNMP на многих серверах, и я подготовил сценарий powershell для рекурсивного выполнения операций, взяв имена различных серверов из текстового файла.Очевидно, что сценарий работает, но за исключением сервера, с которого запускается сценарий, никто больше не устанавливает службу.Я прилагаю скрипт, который использую, и прошу тех, кто знает больше меня, сообщить мне об ошибке.Заранее спасибо.

$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"
 }

1 Ответ

0 голосов
/ 02 мая 2019

Он работает на локальном компьютере только потому, что после Enter-pssession удаленный сеанс не может получить доступ к переменным, которые вы определили локально.

Я отредактировал ваш скрипт, изменив метод удаленного выполнения и вставив локальные переменные с помощью $using:variable.

Примечание : я не проверял реальную логику сценария установки и настройки SNMP.

$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")

$installSNMPsb = { 
     Import-Module ServerManager

     #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 $using: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 $using: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"
}

 foreach ($ServerName in $(Get-Content .\Listaservers.txt)){
    invoke-command -ScriptBlock $installSNMPsb -ComputerName $ServerName
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...