在打印机上测试 SNMP 社区字符串

Test SNMP Community String on printers

在我工作的公司,我们有不同的 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()

显然 $SNMP.Get 命令会抛出一个错误,所以它工作正常:

$CommunityName = 'public' # public foo bar
$P = 'PrinterPort'

$SNMP = New-Object -ComObject olePrn.OleSNMP 

Try {
    $SNMP.Open($P,$CommunityName,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"
    }
}