我希望在 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
}