Powershell - 需要仅为特定NIC更改子网和GW

时间:2015-03-12 00:33:33

标签: powershell gateway subnet

我遇到的情况是,我需要为大约170台服务器更改子网和网关,但只保留IP地址。看起来这很简单,但问题是这些服务器中有很多都有多个接口,所以我必须选择更改哪一个。

幸运的是,我已经用标准惯例命名了所有接口,因此我可以选择我需要的接口,但是因为它的Windows 2008r2我使用的是WMI。

以下是我的问题所在:要收集有关接口名称的信息,我必须使用Win32_NetworkAdapter中包含的NetConnectionID,但为了实际更改接口,我必须使用Win32_NetworkAdapterConfiguration,它不包含该功能根据名称选择接口。

所以我想要做的就是使用两个集合中的Index属性将信息绑定在一起。我首先根据接口名称过滤Win32_NetworkAdapter,获取索引值,然后尝试从Win32_NetworkAdapterConfiguration中选择正确的接口,以便我可以更改所需的子网掩码和网关。

以下是我的剧本;导致问题的非常具体的区域是我试图获得Where {$ .Index -eq $ Index}来处理变量的部分。如果我将语句设置为Where {$ .Index -eq 10)它可以工作,但是如果我尝试使用$ Index的变量就失败了。

这是我的代码:

$index = gwmi Win32_NetworkAdapter -Filter "NetConnectionID='Swizzlan'" | Select-Object - Property Index
$NICs = gwmi Win32_NetworkAdapterConfiguration -computername . | where{$_.Index -eq $Index} 

Foreach($NIC in $NICs) { 
    $ip = ($NIC.IPAddress[0])
    $gateway = "192.168.1.1"
    $subnet = "255.255.252.0"
    $NIC.EnableStatic($ip, $subnet)
    $NIC.SetGateways($gateway) 
}

谁能告诉我如何解决这个问题?经过几个小时的搜索没有找到解决方案给我,我知道它必须是简单的。

1 个答案:

答案 0 :(得分:0)

Win32_NetworkAdapter值" DeviceID"相当于Win32_NetworkAdapterConfiguration值"索引"。

所以,在你的代码中尝试:

$deviceID = gwmi Win32_NetworkAdapter -Filter "NetConnectionID='Swizzlan'" | Select-Object - Property DeviceID
$NICs = gwmi Win32_NetworkAdapterConfiguration -computername . | where{$_.Index -eq $deviceID.DeviceID} 

使用$ deviceID.DeviceID,因为第一行返回PSobject。另一种方法是:

$Adapter = gwmi Win32_NetworkAdapter -Filter "NetConnectionID='Swizzlan'"
$NICs = gwmi Win32_NetworkAdapterConfiguration -computername . | where{$_.Index -eq $Adapter.DeviceID}