-->

自动化脚本用于enable/disable IPv4 on a specific network adapter

Posted on By Marquis

任务需求

win10的电脑,每天开机后我需要先enable有线网卡的ipv4协议,过几秒之后(有线网卡此时获取了公网v6地址)再disable有线网卡的ipv4协议(此时我继续使用无线网卡的v4)。

初步搜索

我找到了一个解决方法: Script to enable/disable IPv4 on a specific network adapter Win 7:

you could do this in powershell like so:
Disable-NetAdapterBinding -Name MyAdapter -DisplayName “Internet Protocol Version 4 (TCP/IPv4)”
I know your question states batch file, but save this with a .ps1 extension and it should do what you need it to.

原来用powershell可以搞啊。

细节探索以及小问题解决

不知道网卡名字(MyAdapter)咋办?
搜索Disable-NetAdapterBinding,找到 官网介绍 发现仍然没有获取名字的方法,在左边发现了一个 Get-NetAdapter 命令,该页面 也没有,这时候我发现名字就是网卡名,即”以太网”。
可以用命令 Get-NetAdapterBinding –Name * -DisplayName "Internet*" 列出所有网卡的名字。

至于以上两个页面的命令需要注意,我们需要的另一个参数 -DisplayName, 微软官网列出的是英文版的命令,如果你的Windows系统是中文版的,那么就得用对应的命令的中文版,可以通过 Get-NetAdapterBinding -Name "以太网" -AllBindings 查看对应的 DisplayName,以及该网卡的状态。
这样-DisplayName “Internet Protocol Version 4 (TCP/IPv4)” 就得替换成:-DisplayName “Internet 协议版本 4 (TCP/IPv4)”

  • 总结如下
    (以下命令需要在powershell允许,而非普通的cmd)
    Enable-NetAdapterBinding -Name "以太网" -DisplayName "Internet 协议版本 4 (TCP/IPv4)": 用来enable 该网卡的v4 (需要管理员权限)
    Get-NetAdapterBinding -Name "以太网" -AllBindings:查看该网卡的各种属性,包括v4是否enable了。
    Disable-NetAdapterBinding -Name "以太网" -DisplayName "Internet 协议版本 4 (TCP/IPv4)":就是关掉该网卡的v4 (需要管理员权限)

以上命令来自Get-NetAdapterBinding以及Disable-NetAdapterBinding的官网页面。

另外,我查到延时命令可以用 Start-Sleep -s 10 10 秒,或用 Start-Sleep的alias sleep.

写成脚本

直接将

Enable-NetAdapterBinding -Name "以太网" -DisplayName "Internet 协议版本 4 (TCP/IPv4)"
sleep -s 2
Disable-NetAdapterBinding -Name "以太网" -DisplayName "Internet 协议版本 4 (TCP/IPv4)"

保存成 v4_enable_disnable.ps1 找不到已管理员权限运行,因此我又写了个cmd的脚本(.bat),根据以下资料的做法
Provide A Batch File To Run Your PowerShell Script From; Your Users Will Love You For It,换成我的文件名

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%v4_enable_disnable.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%PowerShellScriptPath%""' -Verb RunAs}";

保存为bat之后,直接双击运行即可。
(bat和ps1这俩脚本放到一个文件夹下即可。然后可以将bat发送快捷方式到桌面)

注意:如果用一般的编辑器保存v4_enable_disnable.ps1的话,可能是由于编码问题,一直无法运行成功,此时我发现需要了解以下ps1脚本的规范了,根据 这里 的描述,Windows上有一个Windows PowerShell ISE程序,用这个保存就行了。