可通过Invoke-Command批量配置远程Windows服务器IPv4地址与子网掩码,前提为启用WinRM、具备管理员权限,并动态识别物理网卡;脚本支持设置IP、前缀长度、网关及DNS,执行后需验证连通性并记录结果。
可以通过 powershell 的 invoke-command 远程执行 netadapter 和 netipaddress 相关命令,批量配置远程 windows 服务器的 ipv4 地址与子网掩码。关键前提是目标服务器已启用 powershell 远程处理(winrm),且当前用户具有管理员权限。
确保远程管理环境就绪
在本地机器和所有目标服务器上需完成以下准备:
- 目标服务器运行 WinRM 服务:
winrm quickconfig(以管理员身份运行) - 本地机器能通过
Test-WsMan SERVERNAME验证连接成功 - 目标服务器防火墙放行 WinRM(默认端口 5985/HTTPS 5986)
- 使用域账户或启用了凭据委派的本地管理员账户(若跨机器认证)
获取并确认网络适配器名称
不同服务器网卡名可能不同(如 “Ethernet”、“以太网”、“vEthernet” 等),需先统一识别。建议在脚本中动态获取启用中的以太网类适配器:
# 示例:获取第一个启用的、非虚拟、有 IPv4 能力的物理网卡
Get-NetAdapter | Where-Object {$_.Status -eq 'Up' -and $_.Name -notlike "vEthernet*" -and $_.Name -notlike "Loopback*"} | Select-Object -First 1 -ExpandProperty Name
生产环境中建议导出各服务器实际网卡名到 CSV,避免硬编码出错。
批量设置 IPv4 地址与子网掩码
使用 Invoke-Command 在多台服务器上并行执行配置。以下脚本将为每台服务器设置指定 IPv4 地址、前缀长度(等效于子网掩码)、默认网关及 DNS:
$Servers = "SRV01", "SRV02", "SRV03"
$Cred = Get-Credential # 输入具备远程管理员权限的账号
<p>$ScriptBlock = {
param($IP, $PrefixLength, $Gateway, $DNS)</p><pre class="brush:php;toolbar:false;"># 获取主以太网适配器(可按需调整筛选逻辑)
$Adapter = Get-NetAdapter | Where-Object {
$_.Status -eq 'Up' -and $_.Name -notlike "vEthernet*" -and $_.Name -notlike "Loopback*"
} | Select-Object -First 1
if (-not $Adapter) { throw "未找到可用的物理网络适配器" }
$AdapterName = $Adapter.Name
# 删除现有 IPv4 配置(保留 IPv6 可选)
Remove-NetIPAddress -AddressFamily IPv4 -Confirm:$false -ErrorAction SilentlyContinue
Remove-NetRoute -DestinationPrefix "0.0.0.0/0" -Confirm:$false -ErrorAction SilentlyContinue
# 设置新 IPv4 地址与子网(PrefixLength 如 24 = 255.255.255.0)
New-NetIPAddress -IPAddress $IP -PrefixLength $PrefixLength -InterfaceAlias $AdapterName -AddressFamily IPv4
# 设置默认网关(仅当提供时)
if ($Gateway) {
New-NetRoute -DestinationPrefix "0.0.0.0/0" -InterfaceAlias $AdapterName -NextHop $Gateway
}
# 设置 DNS(可选)
if ($DNS) {
Set-DnsClientServerAddress -InterfaceAlias $AdapterName -ServerAddresses $DNS -AddressFamily IPv4
}}
执行批量配置(每台服务器参数可差异化,此处简化为统一值)
Invoke-Command -ComputerName $Servers -Credential $Cred -ScriptBlock $ScriptBlock -ArgumentList "192.168.10.50", 24, "192.168.10.1", @("8.8.8.8","1.1.1.1")
注意:若需为每台服务器分配不同 IP,可改用哈希表或 CSV 导入方式传入个性化参数。
验证与回滚建议
配置后务必验证连通性,推荐在脚本末尾加入检测逻辑:
- 用
Test-Connection -Count 1 -Quiet检查能否 ping 通新地址(需等待几秒) - 记录每台服务器执行结果:
Invoke-Command ... | Select-Object PSComputerName, Success, ErrorMessage - 关键生产环境建议先在单台测试,再加
-ThrottleLimit 5控制并发数 - 保留原始配置(如导出
Get-NetIPAddress -AddressFamily IPv4结果)便于紧急回滚











