2015-11-25 2 views
0

В компании, где я работаю, у нас есть разные 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() 

ответ

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" 
    } 
} 
Смежные вопросы