Я написал сценарий 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