PowerShell SNMP 查询支持的语言
PowerShell SNMP query for supported languages
使用 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
的值?
免责声明:我不熟悉您使用的语言或库,但可以提供一些有关 SNMP 的建议。
看来您只是有点混淆了 OID。您的代码使用 GetTree
获取子树 1.3.6.1.2.1.43.7
。该子树名为 prtLocalization
,是您想要的变量的 parent。 (您可以在 this web page 处看到打印的整个 MIB 树。)
您实际需要的变量是 1.3.6.1.2.1.43.7.1.1.2
、a.k.a prtLocalizationLanguage
。它是 table prtLocalizationTable
.
的第二列
tables 在 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 等
因此,仅获取该列中的值的最简单方法是对列 header(即 1.3.6.1.2.1.43.7.1.1。 2).最有可能的是,只需将该 OID 插入 GetTree()
调用即可完成:
Languages = $SNMP.GetTree(".1.3.6.1.2.1.43.7.1.1.2")
en
fr
it
de
使用 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
的值?
免责声明:我不熟悉您使用的语言或库,但可以提供一些有关 SNMP 的建议。
看来您只是有点混淆了 OID。您的代码使用 GetTree
获取子树 1.3.6.1.2.1.43.7
。该子树名为 prtLocalization
,是您想要的变量的 parent。 (您可以在 this web page 处看到打印的整个 MIB 树。)
您实际需要的变量是 1.3.6.1.2.1.43.7.1.1.2
、a.k.a prtLocalizationLanguage
。它是 table prtLocalizationTable
.
tables 在 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 等
因此,仅获取该列中的值的最简单方法是对列 header(即 1.3.6.1.2.1.43.7.1.1。 2).最有可能的是,只需将该 OID 插入 GetTree()
调用即可完成:
Languages = $SNMP.GetTree(".1.3.6.1.2.1.43.7.1.1.2")
en
fr
it
de