让win10连接网络时自动设置DNS
让win10连接任意网络时自动设置拦截广告的adguard DNS,此DNS能在不误杀的情况下有效过滤大多数广告
使用 Windows 网络连接事件触发 PowerShell 脚本
使用 NetConnectionStatus 和 Register-PowerShellEvent
创建 PowerShell 脚本:
将以下内容复制粘贴到文件中,并保存为 .ps1 文件(例如 Set-AdGuardDNS.ps1)。
# Set-AdGuardDNS.ps1
$logFilePath = "C:\DNSSetupLog.txt" # 日志
$dnsServers = "94.140.14.14", "94.140.15.15" # AdGuard DNS servers
$networkInterfaces = Get-NetAdapter | Where-Object { $_.Status -eq "Up" }
# 获取当前连接的 Wi-Fi SSID
try {
$wlanInfo = netsh wlan show interfaces | Out-String
if ($wlanInfo -match 'SSID\s+:\s+(.*)') {
$ssid = $matches[1].Trim()
} else {
$ssid = "Not Connected to Wi-Fi"
}
} catch {
$ssid = "Error retrieving SSID: $_"
}
$dnsSetSuccessfully = $true # 标记是否所有接口都成功设置了 DNS
foreach ($interface in $networkInterfaces) {
$currentDns = Get-DnsClientServerAddress -InterfaceIndex $interface.ifIndex |
Where-Object { $_.ServerAddresses -ne $null } |
Select-Object -ExpandProperty ServerAddresses
# 如果当前的DNS与目标DNS相同,则不需要更改
if (-not (Compare-Object $currentDns $dnsServers)) {
Write-Host "DNS for interface $($interface.Name) is already set to AdGuard DNS."
continue
}
try {
Set-DnsClientServerAddress -InterfaceIndex $interface.ifIndex -ServerAddresses $dnsServers -ErrorAction Stop
} catch {
$dnsSetSuccessfully = $false
break # 如果有一个失败,则停止循环
}
}
# 记录完成设置 DNS 的日志
if ($dnsSetSuccessfully) {
$logMessage = "$(Get-Date): 成功设定DNS,wifi: $ssid"
} else {
$logMessage = "$(Get-Date): 重置DNS失败,wifi: $ssid."
}
Add-Content -Path $logFilePath -Value $logMessage
创建一个注册表项来监控网络连接变化:
由于任务计划程序缺乏直接的网络连接变化触发器,我们可以利用 Windows 的事件日志和任务计划程序结合的方式来实现这一目标。Windows 在网络连接发生变化时会记录特定的事件日志条目,我们可以监听这些事件并触发我们的脚本。
确定要监听的事件 ID:
当网络连接状态发生变化时,Windows 会生成事件 ID 为 10000 或 8001 的网络诊断事件。你可以通过事件查看器 (eventvwr.msc) 来确认具体的事件 ID。
创建任务计划程序任务以响应网络连接变化:
打开任务计划程序 (taskschd.msc)。
创建一个新的基本任务,并命名为“Set AdGuard DNS on Network Change”。
设置触发器为“当特定事件被记录时”,然后选择 Microsoft-Windows-NetworkProfile/Operational 日志,并指定事件 ID 10000 或 8001(根据你的测试结果选择正确的 ID)。
在操作中选择“启动程序”,然后浏览并选择 PowerShell.exe。
在添加参数框中输入 -File "C:\Path\To\Your\Set-AdGuardDNS.ps1"(请将路径替换为你实际保存脚本的位置)。
确保以最高权限运行此任务。
验证任务是否正常工作:
断开并重新连接网络,或者切换到不同的 Wi-Fi 网络,检查任务是否按预期执行。
可以通过在脚本中加入写入日志的功能以便跟踪任务执行情况。
最后更新于 2024-12-25 11:16:29 并被添加「dns adguard」标签,已有 7809 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处