在打印机

时间:2015-11-25 08:29:19

标签: powershell snmp

在我工作的公司,我们使用不同的SNMP Community Names打印机。他们中的大多数都具有标准值public并且完全可读,其他人则具有foobar等其他内容。

问题是我的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()

1 个答案:

答案 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"
    }
}