Если вы используете DHCP
Тогда доллары для пончиков вам просто нужно продлить аренду DHCP.
Это то, что вы можете легко сделать в CMD (я уверен, что естьВероятно, такой же простой способ в PS, но я не знаю, как он это делает)
Это освободит назначенный в настоящий момент DHCP-адрес, подождите несколько секунд, а затем обновит его.
IPConfig /Release & timeout 5 & IPConfig /Renew
ВCLI или в пакетном скрипте вы можете настроить цикл do-while для цикла, пока вы не вернете ожидаемый адрес up, если хотите.
Пример цикла костюма в 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
)
)
)
Отключение и включение сетевого адаптера можно выполнить с помощью CMD или Powershell.
Здесь Powershell проще.
Получить только доступные в настоящее время адаптеры, используйте их, чтобы отключить их, подождите несколько секунд и включитеих снова
$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
В сочетании с проверкой проверки связи с Интернетом (как в примере 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
подскажите, я обычно пишу оболочку сценария .cmd
для сценария .ps1
, который вызывается из Scedualer или вручную.
Иногда я пишу комбо .cmd
сценарий с ps
Код встроен и просто создать жесткую линию. К оригинальному .cmd
скрипту в качестве. .ps1
для выполнения кода PS.
Хотя для чего-то такого простого, возможно, проще всего использовать PowerShell.exe для запуска сценария в качестве встроенной команды.
Но все дороги ведутВ Риме вы выполняете PowerShell, но для его периодического запуска вам нужно запланировать запуск сценария, и по умолчанию нет способа запустить сценарии ps напрямую, поэтому выберите метод, который вам подходитдля запуска сценария, а затем с помощью планировщика Windows запланировать выполнение задачи каждый интервал времени x (скажем, ежечасно)
Сделайте так, чтобы вы выбрали новую задачу (не базовую задачу) и выбрали запуск с наивысшими привилегиями "установите флажок и выберите самую новую версию Windows, доступную в списке совместимости.
Убедитесь, что вы указали имя пользователя и пароль администратора, и выберите, чтобы сохранить пароль / запустить, независимо от того, вошел ли пользователь в систему илиnot.
Установите триггеры и введите метод, который вы выбрали для выполнения скрипта, и выполните несколько тестов, чтобы сделатьуверен, что он работает, как и ожидалось.
Редактировать:
Исходный метод в форме DO {
Действие } WHILE (
Условие для проверки возвращает True )
Так как while находится в конце, то оногарантирует одну итерацию.
Поскольку вы не хотите отключать и включать сетевой адаптер хотя бы один раз, если Интернет доступен для проверки связи, вы можете использовать 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
}
Вам обязательно нужно запланированное задание для регулярного запуска.
Даже если вы хотите запустить его только один раз и оставить его в фоновом режиме, и всегда проверять его (что мы и делаем)может понадобиться) вам нужно настроить запланированное задание, чтобы убить его, если он все еще работает, и запустить его снова через некоторый интервал, так как возможно, что процесс перестал отвечать на запросы или был убит, или перезагрузить компьютер и т. д., и вы забыли запуститьсценарий и т. д.
Эта версия будет проверять цикл каждую минуту и выполняется только тогда, когда Интернет недоступен.
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
}