我需要一个脚本来更改多个服务器上的网关,如果服务器在特定子网上有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)
}
}
}
答案 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) }
}