更改网关的脚本

时间:2015-08-22 02:15:19

标签: powershell-v3.0

我需要一个脚本来更改多个服务器上的网关,如果服务器在特定子网上有IP,请更改网关。保留没有网关的服务器。

下面有一个脚本,运行时会更改文本文件中列出的所有服务器上的网关,无论服务器是否有网关。

我想我需要在脚本上使用if和else语句,但我对脚本编写不好。

$DefGW = "xxx.xxx.xxx.xxx"

$vm_list = Get-Content "C:\Servers.txt"

foreach ($vm in $vm_list) {
  Write-Host ">>>>$vm<<<<" -Fore Red

  $nics = Get-WmiObject -Class Win_32_NetworkAdapterConfiguration -ComputerName $vm -Filter "IPEnabled=True"

  foreach ($nic in $nics)
    if ($nic.ipaddress -match "xxx.xxx.") {
      $nic.SetGateways($DefGW)
    }
  }
}

1 个答案:

答案 0 :(得分:0)

在致电SetGateways()之前检查属性DefaultIPGateway。这样的事情可能有用:

$DefGW = 'xxx.xxx.xxx.xxx'

Get-Content 'C:\Servers.txt' | ForEach-Object {
  Write-Host ">>>>$_<<<<" -Fore Red

  Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Computer $_ -Filter 'IPEnabled=True' |
    Where-Object { $_.IPAddress -match 'xxx.xxx.' -and $_.DefaultIPGateway } |
    ForEach-Object { $_.SetGateways($DefGW) }
}