在我工作的公司,我们使用不同的SNMP Community Names
打印机。他们中的大多数都具有标准值public
并且完全可读,其他人则具有foo
或bar
等其他内容。
问题是我的PowerShell代码在连接部分失败时不会抛出错误。所以我可以尝试其中一个SNMP Community Names
。
理想情况下,如果连接失败并显示所有已知密码,我希望它最终出现在Catch
子句中,因此我知道无法连接。
代码:
$CommunityName = 'public' # public foo bar
$P = 'PrinterPort'
$SNMP = New-Object -ComObject olePrn.OleSNMP
Try {
# There's no error thrown when it can't connect here:
$SNMP.Open($P,$CommunityName,2,3000)
}
Catch {
$Global:Error.Remove($Global:Error[0])
[PSCustomObject][Ordered]@{
SNMP_PortHostAddress = $P
SNMP_Status = "SNMP Connection failed"
}
}
$SNMP.Get('.1.3.6.1.2.1.25.3.2.1.3.1')
$SNMP.Close()
答案 0 :(得分:0)
显然$SNMP.Get
命令会抛出错误,所以这样可以正常工作:
Try {
$SNMP.Open($P,$CommunictyName,2,3000)
# Check if connection is successfull:
$SNMP.Get('.1.3.6.1.2.1.1.5.0') | Out-Null
}
Catch {
$Global:Error.Remove($Global:Error[0])
[PSCustomObject][Ordered]@{
SNMP_PortHostAddress = $P
SNMP_Status = "SNMP Connection failed"
}
}