这是我的第一篇文章,希望我做得对。
我正在寻找一种方法来自动禁用以太网网络连接,然后重新启用它。
我正在使用营地Internet连接(一次要工作数周),并且Internet连接很好,除了每半小时左右就会中断,并要求我刷新连接。通常,我只是断开以太网插头一秒钟,然后再插回去,但是我想使该过程自动化,以便在我不在时可以远程连接到PC。
任何有关如何完成此操作的帮助将不胜感激。
编辑:我在描述中遗漏了至关重要的部分。我希望脚本检测互联网连接丢失的时间,然后刷新连接。一旦连接丢失,在我刷新连接之前永远不会恢复它。
答案 0 :(得分:0)
您可以使用 Get-NetAdapter , Enable-NetAdapter 和 Disable-NetAdapter 命令来处理此问题。
答案 1 :(得分:0)
然后将美元换成甜甜圈,您只需要续订DHCP租约即可。
这是您可以在CMD中轻松完成的操作(我敢肯定PS中可能有一种简单的方法,但我不为人所知)
这将释放当前分配的DHCP地址,等待几秒钟,然后将其续订。
IPConfig /Release & timeout 5 & IPConfig /Renew
在CLI或批处理脚本中,您可以设置一个do-while循环来循环,直到您需要返回预期的地址为止。
cmd cli中的服装循环示例。
For /L %L (1,1,2147483648) DO (
IPConfig /Release & timeout 3 & IPConfig /Renew &timeout 3 &(
Ping -n 2 4.2.2.2 | find /I "Reply From" | find /I " 4.2.2.2" &&(
Exit /b 0
)
)
)
仅获取当前启用的适配器,使用该适配器禁用它们,等待几秒钟,然后再次启用它们
$NIC_Original_State = get-NetAdapter | ? {$_.Status -eq "Enabled"}
$NIC_Original_State | Disable-NetAdapter -name $_.name -confirm:$false
Sleep 5
$NIC_Original_State | Enable-NetAdapter -name $_.name -confirm:$false
结合检查ping到互联网(如cmd示例)以生成循环,直到建立良好连接为止。
$NIC_Original_State = get-NetAdapter | ? {$_.Status -eq "Enabled"}
DO {
$NIC_Original_State | Disable-NetAdapter -name $_.name -confirm:$false
Sleep 5
$NIC_Original_State | Enable-NetAdapter -name $_.name -confirm:$false
Sleep 5
} While ( ! $(test-connection -TargetName 4.2.2.2 -Quiet ) )
现在,将需要从CMD
提示符处实例化PowerShell,我通常编写一个.cmd
脚本包装,以供.ps1
脚本在任务处理程序中或手动调用。
有时,我将编写一个嵌入了.cmd
代码的组合ps
脚本,并只创建一个强行。以原始的.cmd
脚本作为。 .ps1
执行ps代码。
尽管如此简单,但使用PowerShell.exe作为嵌入式命令运行脚本可能是最简单的。
但是所有道路都通向罗马,您需要执行PowerShell,但是要定期运行它,则需要安排脚本运行,并且默认情况下无法直接运行ps脚本,因此选择一种您喜欢的方法,该方法可用于运行脚本,然后使用Windows Scheduler将任务安排为在您喜欢的每个x间隔(例如每小时)运行一次
让您选择一个新任务(而不是基本任务),然后选择“以最高特权运行”复选框,然后在兼容性列表框中选择最新版本的Windows。
确保提供管理员的用户名和密码,并选择保存密码/运行(无论用户是否登录)。
设置触发器并放入您选择的执行脚本的方法,并运行一些测试以确保其可以正常工作。
原始方法为DO {
动作} WHILE (
要检查的条件返回True )
,因为While结束时它保证一个迭代。
由于即使在Internet可ping通的情况下也不想禁用和启用NIC,因此可以使用WHILE (
条件检查返回的真值) {
操作}
>
$NIC_Original_State = get-NetAdapter | ? {$_.Status -eq "Enabled"}
While ( ! $( test-connection -ComputerName 4.2.2.2 -Quiet ) ) {
$NIC_Original_State | Disable-NetAdapter -name $_.name -confirm:$false
Sleep 5
$NIC_Original_State | Enable-NetAdapter -name $_.name -confirm:$false
Sleep 5
}
您绝对需要安排任务才能定期运行此任务。
即使您只想启动一次并将其留在后台,并且总是进行havit检查(我们可以这样做),您仍需要设置一个计划任务以杀死它(如果仍在运行),然后重新启动它间隔一定的时间,因为可能会导致进程无响应或被杀死,或者使计算机重新启动等,而您却忘记了启动脚本等。
此版本每隔一分钟就会循环检查一次,并且仅在无法访问Internet时执行。
while ($true) {
$NIC_Original_State = get-NetAdapter | ? {$_.Status -eq "Enabled"}
While ( ! $( test-connection -ComputerName 4.2.2.2 -Quiet ) ) {
$NIC_Original_State | Disable-NetAdapter -name $_.name -confirm:$false
Sleep 5
$NIC_Original_State | Enable-NetAdapter -name $_.name -confirm:$false
Sleep 5
}
sleep 60
}
再次,您只能在powershell中运行此命令,当然,btu,然后如果它由于某种原因而停止运行,将不会再次启动。
使用任务计划程序广告设置一个操作来运行此操作o启动并每小时一次,杀死以前运行的脚本副本。
通常,对于运行CMD脚本,我只编写一个简单的cmd脚本,因此,如果我要编辑任何内容,则只更改脚本,而不更改任务。
<# ## & REM Script Name:
@(
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO OFF
(
NET SESSION 2>&1 >NUL
) || (
powershell.exe -Command "Start-Process cmd \"/k %~dpnx0\" -Verb RunAs"
pause
GOTO :EOF
)
IF EXIST "%~dpn0.ps1" (
DEL /Q /F %~dpn0.ps1"
)
MKLINK /H "%~dpn0.ps1" "%~f0"
)
Powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1"
(
ENDLOCAL
EXIT /B %_eLvl%
)
#>
## Script:
## Powershell Portion Begins
while ($true) {
$NIC_Original_State = get-NetAdapter | ? {$_.Status -eq "Enabled"}
While ( ! $( test-connection -ComputerName 4.2.2.2 -Quiet ) ) {
$NIC_Original_State | Disable-NetAdapter -name $_.name -confirm:$false
Sleep 5
$NIC_Original_State | Enable-NetAdapter -name $_.name -confirm:$false
Sleep 5
}
sleep 60
}