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

use*_*557 7 remote-access monitoring snmp zenoss windows-server-2008-r2

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

通过我在网上的搜索,我觉得这可以用 Powershell 完成,然后通过组策略推出,但我对此很陌生,有点令人困惑;我也可能错了。

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

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

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

任何帮助将不胜感激!

Rya*_*ies 8

SNMP 的陈旧和硬皮。Microsoft 已将其 SNMP 引擎置于弃用状态,因此预计新版本的 Windows 中甚至不会包含它。

这听起来对于 Powershell 的新 Desired State Configuration 来说也是一项完美的工作,但是 DSC 很复杂。这是在学习、设置拉式服务器、在整个企业中更新 Powersehell 等方面的相对繁重的承诺。

如果我在每台机器上运行一个脚本来检查是否安装了 SNMP,如果没有安装它,我可能会做这样的事情:

If($(Get-WindowsFeature SNMP-Service).Installed -EQ $False) 
    { Install-WindowsFeature SNMP-Service }
Run Code Online (Sandbox Code Playgroud)

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

配置位不是很迷人。正如我所说,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"}
Run Code Online (Sandbox Code Playgroud)

所以就是这个想法。你可能想多花一点时间来完善和完成它,但有一个概念。

编辑:哦,这里有一个非常好的 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
}
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢您的评论。如果 SNMP 走 Dodo 之路,Zenoss 或 Nagios 等监控供应商是否会支持 DSC? (2认同)