Windows 2012-Powershell v4 无需重新启动即可更新主机文件

Windows 2012-Powershell v4 无需重新启动即可更新主机文件

我编写了一个 Powershell 脚本,在运行时更新主机文件:添加条目、清除条目。

我正在做的事情的一个例子:

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 环境中运行。如果我打开一个新的 shell 来调用 Invoke-Webrequest,并且 uri 被阻止,则会抛出异常。

碳模块可以在这个地址找到:http://get-carbon.org/ 所用功能没有什么特别之处。在使用 Carbon 之前,我使用 Powershell cmdlet Clear-Content 和 Add-Content 更新 hosts 文件。问题已经存在。

我实施的解决方案是使用以下代码创建一个作业:

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

但这个解决方案并不干净,它创建了一个后台工作者。

有没有办法在不关闭/打开 powershell 的情况下“刷新” powershell 环境。我试过了:

  • ipconfig /flushdns
  • ARP-A
  • netsh 接口 ip 删除 arpcache

最后,代码将使用 Windows 计划任务运行。

谢谢你的支持。Vinc3nt

相关内容