如何远程安装、配置和维护 SNMP?

如何远程安装、配置和维护 SNMP?

我希望在 Windows Server 2008 R2 上远程安装 SNMP 和 SNMP WMI 提供程序服务,为代理、陷阱和安全选项卡配置特定选项,然后确保这些服务和设置不会被删除或关闭。这个目标是希望使用 Zenoss 远程监控服务器运行状况。

通过在线搜索,我觉得这可以通过 Powershell 来实现,然后通过组策略推出,但我对此很陌生,有点困惑;我也可能错了。

我的一些服务器是企业版,而一些是标准版,所有服务器都是 R2。我认为我必须为所有服务器安装 SP1、.Net 4.0 和 Powershell 3.0,才能在任何脚本中获得奇偶校验和可靠性。

到目前为止,我已经能够编写一个脚本,让 Powershell 调用 DISM 来安装 SNMP 服务并将该脚本设置为 GPO 中的登录脚本,但我知道这不是最好的方法,因为我不能直接重新启动整个企业的服务器。

我需要指定以下项目:代理 - 联系人和位置陷阱 - 社区名称和陷阱目标安全 - 发送身份验证陷阱 = 是,接受社区名称只读并接受来自任何主机的 SNMP 陷阱 = 是

任何帮助将不胜感激!

答案1

SNMP 已经过时了。Microsoft 已将其 SNMP 引擎置于弃用状态,因此预计新版本的 Windows 中将不会再包含它。

这听起来也非常适合 Powershell 的新所需状态配置,但 DSC 很复杂。学习、设置拉取服务器、在整个企业中更新 Powersehell 等方面需要投入相对较大的精力。

如果我在每台机器上运行一个脚本来检查 SNMP 是否已安装,如果未安装则安装,我可能会执行以下操作:

If($(Get-WindowsFeature SNMP-Service).Installed -EQ $False) 
    { Install-WindowsFeature SNMP-Service }

您可以随意分发该脚本,例如作为启动脚本。或者可以从一台中央计算机循环运行所有计算机并远程执行安装。

配置部分并不吸引人。正如我所说,SNMP 已被弃用,因此 Microsoft 不会花费任何精力为 SNMP 服务创建一堆 Cmdlet。

但配置只是注册表设置。您可以HKLM\SYSTEM\CurrentControlSet\services\SNMP\Parameters从已配置的计算机导出 *.reg 文件,并通过 GPO 或启动脚本将该 *.reg 文件分发到其他计算机。

或者你可以像这个人一样采取更直接的方法: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"}

这就是想法。你可能想花更多的时间来完善和完成它,但这就是概念。

编辑:哦,这里有一个非常不错的关于通过 Powershell 远程管理多个服务器的 MS 文档,其中有一些很好的想法: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
}

相关内容