В компании, где я работаю, у нас есть разные SNMP Community Names
, используемые для принтеров. Большинство из них имеют стандартное значение public
и прекрасно читаемы, другие - что-то вроде foo
или bar
.Тест SNMP Community String на принтерах
Проблема в том, что мой код 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()