【问题标题】:PowerShell SNMP query for supported languages支持语言的 PowerShell SNMP 查询
【发布时间】:2015-07-08 13:37:54
【问题描述】:

在使用GetTree 时,我在检索打印机的 SNMP 信息时遇到了一些困难。在下面的代码中,我想检索字段..prtLocalizationLanguage.1.x 的值。填充在属性 Language 中,例如“en、fr、it、...”。

$PrinterName = '10.10.10.1', 'Printer2'

Function Get-SNMPInfoHC {
    Param (
        [String[]]$PrinterName
    )
    Begin {
        $SNMP = New-Object -ComObject olePrn.OleSNMP
    }
    Process {
        Foreach ($P in $PrinterName) {
            $SNMP.Open($P,"public",2,3000)
            [PSCustomObject][Ordered]@{
                Name        = $SNMP.Get(".1.3.6.1.2.1.1.5.0")
                Model       = $SNMP.Get(".1.3.6.1.2.1.25.3.2.1.3.1")
                Contact     = $SNMP.Get(".1.3.6.1.2.1.1.4.0")
                SN          = $SNMP.Get(".1.3.6.1.2.1.43.5.1.1.17.1")
                Description = $SNMP.Get(".1.3.6.1.2.1.1.1.0")
                Location    = $SNMP.Get(".1.3.6.1.2.1.1.6.0")
                UpTime      = [TimeSpan]::FromSeconds(($SNMP.Get(".1.3.6.1.2.1.1.3.0"))/100)
                TonerName   = $SNMP.Get("43.11.1.1.6.1.1")
                Languages   = $SNMP.GetTree(".1.3.6.1.2.1.43.7")
            }
            $SNMP.Close()
        }
    }
}    
Get-SNMPInfoHC $PrinterName

Language 部分的输出如下所示:

$SNMP.GetTree(".1.3.6.1.2.1.43.7.1.1") 
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationLanguage.1.1
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationLanguage.1.2
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationLanguage.1.3
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationLanguage.1.4
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationCountry.1.1
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationCountry.1.2
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationCountry.1.3
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationCountry.1.4
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationCharacterSet.1.1
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationCharacterSet.1.2
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationCharacterSet.1.3
printmib.prtLocalization.prtLocalizationTable.prtLocalizationEntry.prtLocalizationCharacterSet.1.4
en
fr
it
de
US
FR
IT
DE
2001
2001
2001
2001

有没有办法只检索prtLocalizationLanguage 的值?

【问题讨论】:

    标签: powershell snmp printers


    【解决方案1】:

    免责声明:我不熟悉您使用的语言或库,但可以提供一些有关 SNMP 的建议。

    您似乎只是有点混淆了 OID。您的代码使用GetTree 获取子树1.3.6.1.2.1.43.7。该子树名为prtLocalization,是您想要的变量的父级。 (您可以在this web page 看到打印的整个 MIB 树。)

    你实际需要的变量是1.3.6.1.2.1.43.7.1.1.2,也就是prtLocalizationLanguage。它是表prtLocalizationTable 的第二列。

    表在 SNMP 中的工作方式是通过将索引附加到列 OID 来达到该列中的每个值。像这样:

    • 1.3.6.1.2.1.43.7.1.1.2 .1
    • 1.3.6.1.2.1.43.7.1.1.2 .2
    • 1.3.6.1.2.1.43.7.1.1.2 .3

    因此,仅获取该列中的值的最简单方法是对列标题(即 1.3.6.1.2.1.43.7.1.1.2)执行 SNMP walk 操作。最有可能的是,只需将该 OID 插入 GetTree() 调用即可:

    Languages   = $SNMP.GetTree(".1.3.6.1.2.1.43.7.1.1.2")
    en
    fr
    it
    de
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 2011-11-08
      • 2018-03-17
      • 1970-01-01
      相关资源
      最近更新 更多