PowerShell脚本在某些服务器上失败。失败的服务器上的PowerShell版本是2。
代码如下:
(Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "ipenabled = 'True'").IPAddress[0]
在运行该服务器的服务器上,输出是服务器的IP地址。例如:
10.1.1.1
在失败的服务器上,输出如下:
Cannot index into a null array. At line:1 char:90 + (Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "ipenabled = 'True'").IPAddress[ <<<< 0] + CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
服务器之间的主要区别是:
如果我删除了.IPAddress[0]
,这是输出:
脚本:
(Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "ipenabled = 'True'")
工作服务器上的输出:
DHCPEnabled : False IPAddress : {10.x.x.x} DefaultIPGateway : {10.x.x.x} DNSDomain : ServiceName : NIC Description : NIC NAME Index : 11
脚本失败的服务器上的输出:
DHCPEnabled : False IPAddress : {172.x.x.x} DefaultIPGateway : DNSDomain : ServiceName : l2nd Description : NIC #34 Index : 13 DHCPEnabled : False IPAddress : {10.x.x.x} DefaultIPGateway : {10.x.x.x} DNSDomain : ServiceName : iANSMiniport Description : Index : 20
答案 0 :(得分:0)
这是我正在探索的Reddit上找到的两个答案。他们两个都在工作:
1:
Doing(something).member [index]做了很多假设。我经常会像这样编写代码原型,但是为了更好的验证,我随后对其进行了更改。所以,让我们分解一下...
(something).member[index]
首先,(某些东西)必须求值一个有效的对象,否则该语句的其余部分将无法按预期进行。如果抛出错误会怎样?
然后,.member假定该对象包含此属性,这是不能保证的,因为上面的(某些东西)没有以万无一失的方式进行处理。
最后,[索引]假设您拥有一个数组/容器/列表/多个对象。我经常遇到这个问题,并且视情况而定,行为并不总是一致的,因此,请确保确认(在真正重要的地方)我是单个对象还是多个对象,或者仅使用其他方法。>
通过管道传递和使用cmdlet而不是直接访问成员并进行假设,可以避免很多问题。就像/ u / SeeminglyScience所说的那样,这样做会更好...
something | select-object member
这样,如果某事什么也没返回,则管道将无法继续前进。
如果member可能是容器,并且您需要所有元素...
something | select-object -expandproperty member
并且,如果member可能是容器,并且您只需要第一个元素...
something | select-object -expandproperty member | select-object -first 1
所以,就您而言...
Get-wmiobject win32_networkadapterconfiguration | Select-Object -ExpandProperty IPAddress | Select-Object -First 1
如果您想为所有10.x过滤IP,我都可以使用它...
Get-wmiobject win32_networkadapterconfiguration | Select-Object -ExpandProperty IPAddress | Where-Object {$PSItem -match "10\.\d{1,3}\.\d{1,3}\.\d{1,3}"}
在这一点上,您应该使用IP或$ null来获取一个值,这很容易处理。
第二个解决方案:
$ 1stOctet ='192' $ IPInfo = Get-WmiObject win32_networkadapterconfiguration -filter“ ipenabled ='True'” | 哪里对象{$ _。IPAddress -match“ ^ $ 1stOctet”} |选择对象-扩展属性IP地址