While there are lots of resources on the Internet for disabling IPv6 on Linux, there are very few that show how to disable IPv6 on Windows. Here is a quick recipe that I put together that will disable IPv6 and restart if needed.
powershell_script "disable_ipv6" do
code "New-ItemProperty 'HKLM:\\SYSTEM\\CurrentControlSet\\services\\TCPIP6\\Parameters\\' -Name 'DisabledComponents' -Value '0xffffffff' -PropertyType 'DWord'"
notifies :reboot_now, 'reboot[disable_ipv6_requires_reboot]', :immediately
not_if "(Get-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\services\\TCPIP6\\Parameters' -Name DisabledComponents -ErrorAction SilentlyContinue).DisabledComponents -ne $null"
reboot 'disable_ipv6_requires_reboot' do
reason 'Disabling IPv6 requires a reboot to take effect.'
Before you use this, you should know that Microsoft do not recommend you disable IPv6. You will experience a 5 second delay during the boot up process and Microsoft does not explicitly test this scenario.
Another interesting thing about this recipe is the condition used in the not_if. I initially wanted to use Test-Path, but it turns out that Test-Path doesn’t work on registry values, it only works on registry paths. I got around this using Get-ItemProperty and testing for a null value.