Назад | Перейти на главную страницу

Windows 2012 - файл хостов обновления Powershell v4 без перезапуска

Я написал сценарий Powershell, в котором я обновляю файл hosts во время выполнения: добавляю записи, очищаю записи.

Пример того, что я делаю:

Import-Module 'Carbon'

#Carbon module functions
Reset-HostsFile

#No exception expected
$result = Invoke-Webrequest -Uri "https://blogs.technet.microsoft.com" -UseBasicParsing
$result = $null

#No exception expected
$result = Invoke-Webrequest -Uri "https://www.google.fr" -UseBasicParsing
$result = $null

#No exception expected
$result = Invoke-Webrequest -Uri "http://www.lequipe.fr" -UseBasicParsing
$result = $null

#Block google.fr
Set-HostsEntry -IPAddress 0.0.0.0 -HostName 'google.fr www.google.fr' -Description "Google"

#No exception expected
$result = Invoke-Webrequest -Uri "https://blogs.technet.microsoft.com" -UseBasicParsing
$result = $null

#No exception expected
$result = Invoke-Webrequest -Uri "https://www.google.fr" -UseBasicParsing
$result = $null

#Exception expected
$result = Invoke-Webrequest -Uri "http://www.lequipe.fr" -UseBasicParsing
$result = $null

#Block lequipe.fr
Set-HostsEntry -IPAddress 0.0.0.0 -HostName 'lequipe.fr www.lequipe.fr' -Description "Google"

#No exception expected
$result = Invoke-Webrequest -Uri "https://blogs.technet.microsoft.com" -UseBasicParsing
$result = $null

#No exception expected
$result = Invoke-Webrequest -Uri "https://www.google.fr" -UseBasicParsing
$result = $null

#Exception expected
$result = Invoke-Webrequest -Uri "http://www.lequipe.fr" -UseBasicParsing
$result = $null

Reset-HostsFile

#No exception expected
$result = Invoke-Webrequest -Uri "https://blogs.technet.microsoft.com" -UseBasicParsing
$result = $null

#No exception expected
$result = Invoke-Webrequest -Uri "https://www.google.fr" -UseBasicParsing
$result = $null

#No exception expected
$result = Invoke-Webrequest -Uri "http://www.lequipe.fr" -UseBasicParsing
$result = $null

Когда ожидается исключение, исключение не создается. Это потому, что я все еще работаю в той же среде Powershell. Если я открываю новую оболочку для вызова Invoke-Webrequest с заблокированным uri, возникает исключение.

Углеродный модуль можно найти по этому адресу: http://get-carbon.org/ В используемых функциях нет ничего особенного. Перед использованием Carbon я обновлял файл hosts с помощью командлетов Powershell Clear-Content и Add-Content. Проблема уже существовала.

Решение, которое я реализовал, - создать задание, используя следующий фрагмент кода:

$job = Start-Job –Scriptblock { Invoke-Webrequest -Uri "https://www.google.fr" -UseBasicParsing } 
Wait-Job $job
Receive-Job $job -OutVariable result
$result

Но это решение не чистое, создает фоновый воркер.

Есть ли способ «обновить» среду PowerShell без закрытия / открытия Powershell. Я попытался:

В конце код будет запущен с использованием запланированной задачи Windows.

Спасибо за Вашу поддержку. Vinc3nt