Modify DNS ComboBox

- Replaced "Default" with "Custom"
- Set Default Dropdown Content to applied option or "Custom" if not in the list.
- saves custom IPs on multiple adapters
> If user sets DNS to Cloudflare and runs the tweaks but wants to undo it before he closed the script he can select "custom" and run it to apply the saved addresses
This commit is contained in:
MyDrift 2024-06-07 01:01:48 +02:00
parent 3dca1ee43e
commit 706f73923a
5 changed files with 95 additions and 9 deletions

View File

@ -3043,11 +3043,12 @@
}, },
"WPFchangedns": { "WPFchangedns": {
"Content": "DNS", "Content": "DNS",
"Name": "DNS",
"category": "z__Advanced Tweaks - CAUTION", "category": "z__Advanced Tweaks - CAUTION",
"panel": "1", "panel": "1",
"Order": "a040_", "Order": "a040_",
"Type": "Combobox", "Type": "Combobox",
"ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Level3 Open_DNS Quad9" "ComboItems": "Custom DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Level3 Open_DNS Quad9"
}, },
"WPFTweaksbutton": { "WPFTweaksbutton": {
"Content": "Run Tweaks", "Content": "Run Tweaks",

View File

@ -0,0 +1,70 @@
function Get-WinUtilDNS {
<#
.SYNOPSIS
Gets the DNS of all interfaces that are in the "Up" state. It will set the default state of the ComboBox to the DNS provider that is currently set on the interface.
#>
Try {
$Adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"}
# Get all DNS providers and their server addresses
$dnsProviders = $sync.configs.dns.PSObject.Properties | ForEach-Object {
@{
Name = $_.Name
Primary = $_.Value.Primary
Secondary = $_.Value.Secondary
}
}
# Initialize a variable to hold the matched provider
$matchedProvider = $null
$global:previousDnsSettings = @()
Foreach ($Adapter in $Adapters) {
Try {
# Get the current DNS server addresses
$currentDnsServers = (Get-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -AddressFamily IPv4).ServerAddresses
# Save the current DNS server addresses
$global:previousDnsSettings += @{
AdapterName = $Adapter.Name
DnsAddresses = $currentDnsServers
}
# Check if the current DNS servers match any of the providers
$matchingProvider = $dnsProviders | Where-Object {
$currentDnsServers -contains $_.Primary -and $currentDnsServers -contains $_.Secondary
}
if ($matchingProvider) {
# If this is the first match, set the matchedProvider
if (-not $matchedProvider) {
$matchedProvider = $matchingProvider.Name
} elseif ($matchedProvider -ne $matchingProvider.Name) {
# If there is a mismatch in providers, set to Custom
$matchedProvider = "Custom"
break
}
} else {
# If no match is found, set to Custom
$matchedProvider = "Custom"
break
}
} Catch {
Write-Warning "Failed to process adapter: $($Adapter.Name)"
Write-Warning $_.Exception.Message
Write-Warning $_.Exception.StackTrace
}
}
# Set the text of $sync["WPFchangedns"] to the result text
$sync["WPFchangedns"].text = if ($matchedProvider) { $matchedProvider } else { "Custom" }
}
Catch {
Write-Warning "Unable to get DNS Provider due to an unhandled exception"
Write-Warning $_.Exception.Message
Write-Warning $_.Exception.StackTrace
}
}

View File

@ -12,23 +12,36 @@ function Set-WinUtilDNS {
#> #>
param($DNSProvider) param($DNSProvider)
if($DNSProvider -eq "Default"){return}
$dnsProviders = $sync.configs.dns.PSObject.Properties.Name
Try{ Try{
$Adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"} $Adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"}
Write-Host "Ensuring DNS is set to $DNSProvider on the following interfaces" Write-Host "Ensuring DNS is set to $DNSProvider on the following interfaces"
Write-Host $($Adapters | Out-String) Write-Host $($Adapters | Out-String)
Foreach ($Adapter in $Adapters){ Foreach ($Adapter in $Adapters){
if($DNSProvider -eq "DHCP"){ switch ($DNSProvider) {
"DHCP" {
Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ResetServerAddresses Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ResetServerAddresses
} }
Else{ "Custom" {
$savedSettings = $global:previousDnsSettings | Where-Object { $_.AdapterName -eq $Adapter.Name }
if ($savedSettings) {
# Set the DNS server addresses for the adapter to the saved addresses
Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses $savedSettings.DnsAddresses
}
}
default {
Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary)", "$($sync.configs.dns.$DNSProvider.Secondary)") Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary)", "$($sync.configs.dns.$DNSProvider.Secondary)")
} }
} }
} }
}
Catch{ Catch{
Write-Warning "Unable to set DNS Provider due to an unhandled exception" Write-Warning "Unable to set DNS Provider due to an unhandled exception"
Write-Warning $psitem.Exception.StackTrace Write-Warning $_.Exception.Message
Write-Warning $_.Exception.StackTrace
} }
} }

View File

@ -434,6 +434,8 @@ $sync["CheckboxFilter"].Add_TextChanged({
$label.Visibility = "Collapsed"} $label.Visibility = "Collapsed"}
}) })
Get-WinUtilDNS
# Define event handler for button click # Define event handler for button click
$sync["SettingsButton"].Add_Click({ $sync["SettingsButton"].Add_Click({
Write-Debug "SettingsButton clicked" Write-Debug "SettingsButton clicked"

View File

@ -40,7 +40,7 @@
<StackPanel Orientation="Horizontal" Margin="0,5,0,0"> <StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<Label Content="DNS" HorizontalAlignment="Left" VerticalAlignment="Center"/> <Label Content="DNS" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<ComboBox Name="WPFchangedns" Height="32" Width="186" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5,5"> <ComboBox Name="WPFchangedns" Height="32" Width="186" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="5,5">
<ComboBoxItem IsSelected="True" Content="Default"/> <ComboBoxItem IsSelected="True" Content="Custom"/>
<ComboBoxItem Content="DHCP"/> <ComboBoxItem Content="DHCP"/>
<ComboBoxItem Content="Google"/> <ComboBoxItem Content="Google"/>
<ComboBoxItem Content="Cloudflare"/> <ComboBoxItem Content="Cloudflare"/>