Powershell:遍历SNMP OID并处理输出?

Powershell:遍历SNMP OID并处理输出?,powershell,hashtable,snmp,Powershell,Hashtable,Snmp,我正在使用SharpSnmpLibWrapper遍历几个SNMP OID,并返回我所在位置的手机的输出。我正在将结果保存在哈希表中,但在处理输出时遇到了问题 我创建了一个散列并抛出了一个foreach循环,以便对每个设备的四个OID运行一次遍历,并输出到它的表中,如下所示 foreach ($device in $list) { $Hash.$device = @{} $Hash.$device.Name = @{} $Hash.$device.Models = @{} $Hash.$devi

我正在使用SharpSnmpLibWrapper遍历几个SNMP OID,并返回我所在位置的手机的输出。我正在将结果保存在哈希表中,但在处理输出时遇到了问题

我创建了一个散列并抛出了一个foreach循环,以便对每个设备的四个OID运行一次遍历,并输出到它的表中,如下所示

foreach ($device in $list) 
{
$Hash.$device = @{}
$Hash.$device.Name = @{}
$Hash.$device.Models = @{}
$Hash.$device.RegStatus = @{}
$Hash.$device.SEP = @{}
$Agent = $device | New-SharpSnmpAgent -Community 'SuperSecret'
$Hash.$device.Name         = $Agent | Get-SharpSnmpWalk -OID '1.3.6.1.4.1.9.9.439.1.1.43.1.6'
$Hash.$device.Models       = $Agent | Get-SharpSnmpWalk -OID '1.3.6.1.4.1.9.9.439.1.2.6.1.11'
$Hash.$device.RegStatus    = $Agent | Get-SharpSnmpWalk -OID '1.3.6.1.4.1.9.9.439.1.2.6.1.1'
$Hash.$device.SEP          = $Agent | Get-SharpSnmpWalk -OID '1.3.6.1.4.1.9.9.439.1.2.6.1.2'
}
我想做的是匹配输出中“Id”的最后xx位,将每个设备与其数据中的值一起分组

$Hash.$device.RegStatus返回以下内容

    Source     Id                                Data           
    ------     --                                ----           
    Device1    .1.3.6.1.4.1.9.9.439.1.2.6.1.1.10 SEPxxxxxxxxxxxx
    Device1    .1.3.6.1.4.1.9.9.439.1.2.6.1.1.11 SEPxxxxxxxxxxxx
    Device1    .1.3.6.1.4.1.9.9.439.1.2.6.1.1.12 SEPxxxxxxxxxxxx
    Device1    .1.3.6.1.4.1.9.9.439.1.2.6.1.1.14 SEPxxxxxxxxxxxx
但是,如果我尝试只显示Id,我会记录以下内容

$Hash.$device.RegStatus.Id

    TypeCode
    --------
    ObjectIdentifier
    ObjectIdentifier
所以我不确定如何处理这个问题,或者我上面的方法是否是一个好的开始。最终,期望的输出是将四个OID放在一起,以便我可以处理数据。 例如:


应该都是同一部手机(我猜)。如果我真的可以读取表中的“Id”值,我可以将其排序。

这是一个
对象标识符
…呃,对象,这就是为什么您会看到它。您需要进一步检查该类,以便了解该类下需要处理的其他成员。您应该能够使用
Get Member
cmdlet查看该信息:

$Hash.$device.RegStatus.Id | Get-Member
或者使用它的别名,
gm
(我个人的偏好):


这将输出该对象上可供您使用的所有公共成员。

没有一个公共成员会返回我在表中看到的值。使用(例如)[string]$Hash.$device.RegStatus.ID[0]返回所需的响应。现在我只需要弄清楚这个方法是否能够匹配OID的最后2-3位来形成数据。感谢您的回复。这表明它是某种数组,但我不确定它为什么在本例中返回数组的对象类型。您最好在
ID
属性返回的任何索引中检查OID,而不是假设它在第一个索引中。出于好奇,
ObjectIdentifier
类型的全名是什么?管道输出到
Get Member
将向您显示完全命名的类型。$Hash.$device.RegStatus.ID TypeName:Lextm.SharpSnmpLib.ObjectIdentifier,而$Hash.$device.RegStatus TypeName:Lextm.SharpSnmpLib.Variable和一级以上的$Hash.$device TypeName:System.Collections.Hashtable
$Hash.$device.RegStatus.Id | Get-Member
$Hash.$device.RegStatus.Id | gm