[英]Is there a way to disable and enable network connection when internet is lost
這是我的第一篇文章,所以希望我做得對。
我正在尋找一種方法來自動化禁用我的以太網網絡連接然后重新啟用它的過程。
我在營地互聯網連接上(一次工作數周),互聯網連接很好,除了每隔半小時左右就會掉線並要求我刷新連接。 通常我只是斷開以太網插頭一秒鍾然后重新插入,但我想自動化這個過程,這樣我就可以在我離開時遠程連接到電腦。
任何有關如何實現此目的的幫助將不勝感激。
編輯:我在描述中遺漏了一個重要部分。 我希望腳本檢測互聯網連接何時丟失,然后刷新連接。 一旦連接丟失,它永遠不會重新獲得它,直到我刷新連接。
您可以使用Get-NetAdapter 、 Enable-NetAdapter和Disable-NetAdapter命令來處理這個問題。
然后美元換成甜甜圈,您只需要更新您的 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
結合檢查對 Internet 的 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 ) )
現在,PowerShell 需要從CMD
提示符中實例化,我通常為.ps1
腳本編寫一個.cmd
腳本包裝器,以便在任務中手動調用或調用。
有時我會編寫一個嵌入ps
代碼的組合.cmd
腳本,然后創建一個強硬路線。 以原來的.cmd
腳本作為一個。 .ps1
執行 ps 代碼。
盡管對於這么簡單的事情,使用 PowerShell.exe 將腳本作為內聯命令運行可能是最簡單的。
但是條條大路通羅馬,你在執行PowerShell,但是為了定期運行它,你需要調度腳本運行,並且默認沒有辦法直接運行ps腳本,所以選擇一個方法您喜歡運行腳本,然后使用 windows 調度程序安排任務每隔 x 間隔運行一次(比如每小時)
Make surw you select a new task (not a basic task) and select run with highest priviledges" checkbox, and select the newest version of windows available in the compatibility list-box.
確保提供管理員的用戶名和密碼,以及 select 以保存密碼/運行無論用戶是否登錄。
設置觸發器並放入您選擇的方法來執行腳本並運行一些測試以確保它按預期工作。
原始方法采用DO {
Action } WHILE (
檢查條件返回 True )
,因為 While 在末尾,它保證了一次迭代。
由於即使 Internet 可 ping,您也不想禁用和啟用 NIC,因此您可以使用WHILE (
Condition To Check Returns True ) {
Action }
$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
}
你絕對需要有一個計划任務來定期運行它。
即使您只想啟動一次並將其留在后台,並且始終進行檢查(我們可以這樣做),您也需要設置一個計划任務以在仍在運行時將其殺死並在某個時間間隔重新啟動它可能有一個進程變得無響應或被殺死或讓計算機重新啟動等,而您忘記啟動腳本等。
此版本將每隔一分鍾循環檢查一次,並且僅在無法訪問 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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.