Я хочу удаленно установить службы поставщика SNMP и SNMP WMI на Windows Server 2008 R2, настроить определенные параметры для вкладок «Агент», «Ловушки» и «Безопасность», а затем убедиться, что эти службы и настройки не удалены и не отключены. Эта цель вызвана желанием удаленно контролировать состояние сервера с помощью Zenoss.
По моим поискам в Интернете, я чувствую, что это может быть выполнено с помощью Powershell, а затем вытеснено с помощью групповой политики, но я новичок в этом, и это немного сбивает с толку; Я тоже могу ошибаться.
Некоторые из моих серверов являются корпоративными, а некоторые - стандартными, все - R2. Я предполагаю, что мне придется установить SP1, .Net 4.0 и Powershell 3.0 для всех серверов, чтобы обеспечить равенство и надежность при написании любых сценариев.
До сих пор мне удалось написать сценарий для Powershell для вызова DISM, чтобы установить службу SNMP и установить этот сценарий как сценарий входа в систему в GPO, но я знаю, что это не лучший способ сделать это, так как я не могу просто пойти перезагрузка серверов на предприятии.
Мне нужно указать следующие элементы: Агент - контакт и местоположение. Ловушки - имя сообщества и место назначения прерывания. Безопасность - отправить ловушку аутентификации = да, принятое имя сообщества - ТОЛЬКО ЧИТАТЬ и принимать ловушки SNMP с любого хоста = да.
Любая помощь будет принята с благодарностью!
SNMP старый и надежный. Microsoft поместила свой механизм SNMP в статус устаревшего, поэтому ожидайте, что он даже не будет включен в новые версии Windows.
Это также звучит так, как будто это была бы идеальная работа для новой конфигурации желаемого состояния Powershell, но DSC сложна. Это относительно тяжелая задача в обучении, настройке опрашивающего сервера, обновлении Powersehell на предприятии и т. Д.
Если бы мне пришлось запустить сценарий на каждой машине, чтобы проверить, установлен ли SNMP или нет, и установить его, если нет, я мог бы сделать что-то вроде этого:
If($(Get-WindowsFeature SNMP-Service).Installed -EQ $False)
{ Install-WindowsFeature SNMP-Service }
Вы можете распространять этот сценарий, как хотите, возможно, как сценарий запуска. Или, возможно, пропустите цикл всех компьютеров с одного центрального компьютера и выполните установку удаленно.
Бит конфигурации не очень гламурен. Как я уже сказал, протокол SNMP устарел, поэтому Microsoft не собирается тратить энергию на создание набора командлетов для службы SNMP.
Но конфигурация - это всего лишь настройки реестра. Вы можете экспортировать HKLM\SYSTEM\CurrentControlSet\services\SNMP\Parameters
* .reg с настроенной машины и распространите этот * .reg-файл на другие машины через GPO или сценарий запуска.
Или вы могли бы использовать более прямой подход, как этот парень: http://poshcode.org/2066
По ссылке poshcode:
$pmanagers = "ADD YOUR MANAGER(s)"
$commstring = "ADD YOUR COMM STRING"
Import-Module ServerManager
#Check If SNMP Services Are Already Installed
$check = Get-WindowsFeature | Where-Object {$_.Name -eq "SNMP-Services"}
If ($check.Installed -ne "True") {
#Install/Enable SNMP Services
Add-WindowsFeature SNMP-Services | Out-Null
}
##Verify Windows Servcies Are Enabled
If ($check.Installed -eq "True"){
#Set SNMP Permitted Manager(s) ** WARNING : This will over write current settings **
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\PermittedManagers" /v 1 /t REG_SZ /d localhost /f | Out-Null
#Used as counter for incremting permitted managers
$i = 2
Foreach ($manager in $pmanagers){
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\PermittedManagers" /v $i /t REG_SZ /d $manager /f | Out-Null
$i++
}
#Set SNMP Community String(s)- *Read Only*
Foreach ( $string in $commstring){
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SNMP\Parameters\ValidCommunities" /v $string /t REG_DWORD /d 4 /f | Out-Null
}
}
Else {Write-Host "Error: SNMP Services Not Installed"}
Так вот идея. Возможно, вы захотите потратить немного больше времени на полировку и завершение этого, но концепция есть.
Изменить: О, и вот довольно хороший документ MS об удаленном управлении несколькими серверами через Powershell, в котором есть несколько хороших идей: http://technet.microsoft.com/en-us/library/hh831809.aspx
function Invoke-WindowsFeatureBatchDeployment {
param (
[parameter(mandatory)]
[string[]] $ComputerNames,
[parameter(mandatory)]
[string] $ConfigurationFilePath
)
# Deploy the features on multiple computers simultaneously.
$jobs = @()
foreach($ComputerName in $ComputerNames) {
$jobs += Start-Job -Command {
Install-WindowsFeature -ConfigurationFilePath $using:ConfigurationFilePath -ComputerName $using:ComputerName -Restart
}
}
Receive-Job -Job $jobs -Wait | Select-Object Success, RestartNeeded, ExitCode, FeatureResult
}