[{"data":1,"prerenderedAt":1875},["ShallowReactive",2],{"post:\u002F2025\u002F04\u002F03\u002Fpowershell-windows-disable-ipv6-fleet-wide-via-group-policy-startup-script\u002F":3},{"post":4,"newer":1822,"older":1832,"related":1843,"series":1873},{"id":5,"title":6,"body":7,"canonical":1802,"categories":1803,"date":1806,"description":1807,"extension":1808,"featured":1809,"hero":1810,"image":1810,"meta":1811,"navigation":657,"path":1812,"readingTime":488,"seo":1813,"series":1810,"seriesOrder":1810,"sites":1814,"source":1810,"stem":1815,"tags":1816,"updated":1810,"url":1820,"__hash__":1821},"blog\u002Fblog\u002F2025\u002F04\u002F03\u002Fpowershell-windows-disable-ipv6-fleet-wide-via-group-policy-startup-script.md","PowerShell: Windows – Disable IPv6 Fleet-Wide via GPO Startup Script",{"type":8,"value":9,"toc":1794},"minimark",[10,46,51,83,87,186,195,199,202,286,294,309,318,321,340,346,364,370,402,405,451,455,1645,1649,1750,1754,1790],[11,12,13,14,18,19,22,23,27,28,31,32,35,36,39,40,45],"p",{},"Every so often a vendor tells me IPv6 is the reason their agent won't check in, or a monitoring tool logs a flood of link-local addresses nobody asked for, and someone asks for IPv6 to be turned off across the fleet. Before you do that, read what Microsoft actually says in KB 929852 (\"Configure IPv6 for advanced users\"): IPv6 is a mandatory part of Windows since Vista and Server 2008, Microsoft does ",[15,16,17],"strong",{},"not"," recommend disabling IPv6, disabling its components, or unbinding it from interfaces (\"some Windows components might not function\"), and it recommends the ",[15,20,21],{},"Prefer IPv4 over IPv6"," prefix policy instead. The knob for either option is the ",[24,25,26],"code",{},"DisabledComponents"," DWORD under ",[24,29,30],{},"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters",". This script writes it from a Group Policy computer startup script, defaults to the recommended ",[24,33,34],{},"0x20"," (prefer IPv4), only goes to the full ",[24,37,38],{},"0xFF"," disable when you ask for it, logs what it changed, and warns about adapters where someone unbound IPv6 by hand. The longer story of what breaks when you go further is in ",[41,42,44],"a",{"href":43},"\u002F2026\u002F06\u002F24\u002Fwindows-server-disabling-ipv6-company-wide-what-actually-broke\u002F","Windows Server: Disabling IPv6 Company-Wide — What Actually Broke",".",[47,48,50],"h2",{"id":49},"requirements","Requirements",[52,53,54,66,73,80],"ul",{},[55,56,57,58,61,62,65],"li",{},"Windows PowerShell 5.1 (built into Windows 10 \u002F Server 2016 and later). No external modules; ",[24,59,60],{},"Get-NetAdapterBinding"," is in the built-in ",[24,63,64],{},"NetAdapter"," module.",[55,67,68,69,72],{},"Rights to create and link a GPO in the target OU (delegated GPO rights or Domain Admin). The ",[24,70,71],{},"GroupPolicy"," module (RSAT) if you script the GPO side.",[55,74,75,76,79],{},"The script must run under Computer Configuration (startup script), not User Configuration: it writes an ",[24,77,78],{},"HKLM"," value, and computer startup scripts run as SYSTEM before anyone logs on.",[55,81,82],{},"A restart after the value changes. Microsoft's note on the key: \"You must restart your computer for these changes to take effect.\"",[47,84,86],{"id":85},"parameters","Parameters",[88,89,90,109],"table",{},[91,92,93],"thead",{},[94,95,96,100,103,106],"tr",{},[97,98,99],"th",{},"Name",[97,101,102],{},"Type",[97,104,105],{},"Required",[97,107,108],{},"Description",[110,111,112,168],"tbody",{},[94,113,114,120,123,126],{},[115,116,117],"td",{},[24,118,119],{},"-DisabledComponentsValue",[115,121,122],{},"int",[115,124,125],{},"No",[115,127,128,129,131,132,135,136,138,139,142,143,135,146,149,150,135,152,154,155,135,158,161,162,135,165,167],{},"DWORD written to ",[24,130,26],{},". Default ",[24,133,134],{},"32"," (",[24,137,34],{},", prefer IPv4 over IPv6, Microsoft's recommended setting). Allowed: ",[24,140,141],{},"0"," (default Windows behaviour, used for rollback), ",[24,144,145],{},"1",[24,147,148],{},"0x01",", disable tunnel interfaces), ",[24,151,134],{},[24,153,34],{},"), ",[24,156,157],{},"33",[24,159,160],{},"0x21",", prefer IPv4 and disable tunnels), ",[24,163,164],{},"255",[24,166,38],{},", disable IPv6 on everything except loopback).",[94,169,170,175,178,180],{},[115,171,172],{},[24,173,174],{},"-LogPath",[115,176,177],{},"string",[115,179,125],{},[115,181,182,183,45],{},"Folder for the per-day log file. Default ",[24,184,185],{},"C:\\ProgramData\\GPStartupLogs",[11,187,188,189,191,192,194],{},"The values come straight from the KB's bitmask table: bit 0 disables tunnel interfaces, bit 4 disables native (non-tunnel) interfaces, bit 5 sets the prefer-IPv4 prefix policy, and ",[24,190,38],{}," sets every bit. ",[24,193,160],{}," is simply bit 0 plus bit 5.",[47,196,198],{"id":197},"usage","Usage",[11,200,201],{},"Test on a single machine first, from an elevated session, and look at the log and the resulting value:",[203,204,209],"pre",{"className":205,"code":206,"language":207,"meta":208,"style":208},"language-powershell shiki shiki-themes github-dark",".\\Set-Ipv6DisabledComponents.ps1 -Verbose\nGet-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters\" -Name DisabledComponents\nGet-Content -Path \"C:\\ProgramData\\GPStartupLogs\\Set-Ipv6DisabledComponents-$(Get-Date -Format 'yyyyMMdd').log\"\n","powershell","",[24,210,211,230,250],{"__ignoreMap":208},[212,213,216,219,223,227],"span",{"class":214,"line":215},"line",1,[212,217,45],{"class":218},"s95oV",[212,220,222],{"class":221},"sDLfK","\\Set-Ipv6DisabledComponents.ps1",[212,224,226],{"class":225},"snl16"," -",[212,228,229],{"class":218},"Verbose\n",[212,231,233,236,238,241,245,247],{"class":214,"line":232},2,[212,234,235],{"class":221},"Get-ItemProperty",[212,237,226],{"class":225},[212,239,240],{"class":218},"Path ",[212,242,244],{"class":243},"sU2Wk","\"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters\"",[212,246,226],{"class":225},[212,248,249],{"class":218},"Name DisabledComponents\n",[212,251,253,256,258,260,263,266,269,272,274,277,280,283],{"class":214,"line":252},3,[212,254,255],{"class":221},"Get-Content",[212,257,226],{"class":225},[212,259,240],{"class":218},[212,261,262],{"class":243},"\"C:\\ProgramData\\GPStartupLogs\\Set-Ipv6DisabledComponents-",[212,264,265],{"class":225},"$",[212,267,268],{"class":243},"(",[212,270,271],{"class":221},"Get-Date",[212,273,226],{"class":225},[212,275,276],{"class":243},"Format ",[212,278,279],{"class":243},"'yyyyMMdd'",[212,281,282],{"class":243},")",[212,284,285],{"class":243},".log\"\n",[203,287,292],{"className":288,"code":290,"language":291,"meta":208},[289],"language-text","2025-04-03 07:12:41 Startup script running on SRV-APP01. Target DisabledComponents = 0x20.\n2025-04-03 07:12:41 DisabledComponents changed from \u003Cnot set> to 0x20. Restart required.\n","text",[24,293,290],{"__ignoreMap":208},[11,295,296,297,300,301,304,305,308],{},"After the restart, confirm the prefix policy changed. The KB's check: in the output, the ",[24,298,299],{},"::ffff:0:0\u002F96"," (IPv4-mapped) prefix must now have a higher precedence number than ",[24,302,303],{},"::\u002F0",", and ",[24,306,307],{},"ping \u003Chostname>"," for a dual-stack name should answer from its IPv4 address:",[203,310,312],{"className":205,"code":311,"language":207,"meta":208,"style":208},"netsh interface ipv6 show prefixpolicies\n",[24,313,314],{"__ignoreMap":208},[212,315,316],{"class":214,"line":215},[212,317,311],{"class":218},[11,319,320],{},"Only if you have a documented reason to go further, fully disable IPv6 (everything but loopback) on a pilot box:",[203,322,324],{"className":205,"code":323,"language":207,"meta":208,"style":208},".\\Set-Ipv6DisabledComponents.ps1 -DisabledComponentsValue 255\n",[24,325,326],{"__ignoreMap":208},[212,327,328,330,332,334,337],{"class":214,"line":215},[212,329,45],{"class":218},[212,331,222],{"class":221},[212,333,226],{"class":225},[212,335,336],{"class":218},"DisabledComponentsValue ",[212,338,339],{"class":221},"255\n",[11,341,342,343,345],{},"Roll back by writing the default value ",[24,344,141],{},":",[203,347,349],{"className":205,"code":348,"language":207,"meta":208,"style":208},".\\Set-Ipv6DisabledComponents.ps1 -DisabledComponentsValue 0\n",[24,350,351],{"__ignoreMap":208},[212,352,353,355,357,359,361],{"class":214,"line":215},[212,354,45],{"class":218},[212,356,222],{"class":221},[212,358,226],{"class":225},[212,360,336],{"class":218},[212,362,363],{"class":221},"0\n",[11,365,366,367,369],{},"Create and link the GPO once the script is in SYSVOL, then attach it under Computer Configuration > Policies > Windows Settings > Scripts (Startup\u002FShutdown) > Startup, on the PowerShell Scripts tab, in the Group Policy Management Editor. The ",[24,368,71],{}," module creates and links the GPO, but it has no cmdlet for the startup-script assignment:",[203,371,373],{"className":205,"code":372,"language":207,"meta":208,"style":208},"New-GPO -Name \"IPv6 - Prefer IPv4\" | New-GPLink -Target \"OU=Servers,DC=\u003Cdomain>,DC=\u003Ctld>\"\n",[24,374,375],{"__ignoreMap":208},[212,376,377,380,382,385,388,391,394,396,399],{"class":214,"line":215},[212,378,379],{"class":221},"New-GPO",[212,381,226],{"class":225},[212,383,384],{"class":218},"Name ",[212,386,387],{"class":243},"\"IPv6 - Prefer IPv4\"",[212,389,390],{"class":225}," |",[212,392,393],{"class":221}," New-GPLink",[212,395,226],{"class":225},[212,397,398],{"class":218},"Target ",[212,400,401],{"class":243},"\"OU=Servers,DC=\u003Cdomain>,DC=\u003Ctld>\"\n",[11,403,404],{},"If you don't need the logging or the binding check, a registry-based policy does the same job without any script, and it stays enforced on every Group Policy refresh:",[203,406,408],{"className":205,"code":407,"language":207,"meta":208,"style":208},"Set-GPRegistryValue -Name \"IPv6 - Prefer IPv4\" -Key \"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters\" -ValueName \"DisabledComponents\" -Type DWord -Value 32\n",[24,409,410],{"__ignoreMap":208},[212,411,412,415,417,419,421,423,426,429,431,434,437,439,442,445,448],{"class":214,"line":215},[212,413,414],{"class":221},"Set-GPRegistryValue",[212,416,226],{"class":225},[212,418,384],{"class":218},[212,420,387],{"class":243},[212,422,226],{"class":225},[212,424,425],{"class":218},"Key ",[212,427,428],{"class":243},"\"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters\"",[212,430,226],{"class":225},[212,432,433],{"class":218},"ValueName ",[212,435,436],{"class":243},"\"DisabledComponents\"",[212,438,226],{"class":225},[212,440,441],{"class":218},"Type DWord ",[212,443,444],{"class":225},"-",[212,446,447],{"class":218},"Value ",[212,449,450],{"class":221},"32\n",[47,452,454],{"id":453},"script","Script",[203,456,458],{"className":205,"code":457,"language":207,"meta":208,"style":208},"\u003C#\n.SYNOPSIS\n    Sets the Tcpip6 DisabledComponents value from a Group Policy startup script.\n.DESCRIPTION\n    Writes the DisabledComponents DWORD under\n    HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters. The default, 0x20,\n    is Microsoft's recommended \"Prefer IPv4 over IPv6\" prefix policy, which keeps\n    the IPv6 stack running. 0xFF disables IPv6 on all interfaces except loopback,\n    which Microsoft does not recommend. The script only writes the registry when\n    the current value differs, warns about adapters where IPv6 has been unbound\n    (an unsupported configuration), and logs every run to a local file. It runs\n    on every boot, so machines that were offline at rollout pick it up later.\n.PARAMETER DisabledComponentsValue\n    DWORD to write. 0 (default Windows behaviour, rollback), 1 (0x01, disable\n    tunnel interfaces), 32 (0x20, prefer IPv4), 33 (0x21, prefer IPv4 and\n    disable tunnels) or 255 (0xFF, disable IPv6 except loopback). Default 32.\n.PARAMETER LogPath\n    Folder for the per-day log file. Default C:\\ProgramData\\GPStartupLogs.\n.EXAMPLE\n    .\\Set-Ipv6DisabledComponents.ps1\n.EXAMPLE\n    .\\Set-Ipv6DisabledComponents.ps1 -DisabledComponentsValue 255 -LogPath \"C:\\Logs\\Ipv6\"\n.NOTES\n    Author  : Thomas Lasswell (https:\u002F\u002Fwww.techcolumnist.com)\n    Version : 1.0 (2025-04-03)\n    Requires: Windows PowerShell 5.1, NetAdapter module, run as SYSTEM or Administrator\n.LINK\n    https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Ftroubleshoot\u002Fwindows-server\u002Fnetworking\u002Fconfigure-ipv6-in-windows\n#>\n\n[CmdletBinding()]\nparam (\n    [Parameter()]\n    [ValidateSet(0, 1, 32, 33, 255)]\n    [int]$DisabledComponentsValue = 32,\n\n    [Parameter()]\n    [string]$LogPath = \"C:\\ProgramData\\GPStartupLogs\"\n)\n\n$regPath = \"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters\"\n$regName = \"DisabledComponents\"\n$targetHex = \"0x{0:X2}\" -f $DisabledComponentsValue\n\nif (-not (Test-Path -Path $LogPath)) {\n    New-Item -Path $LogPath -ItemType Directory -Force | Out-Null\n}\n\n$logFile = Join-Path -Path $LogPath -ChildPath \"Set-Ipv6DisabledComponents-$(Get-Date -Format 'yyyyMMdd').log\"\n\nfunction Write-Log {\n    param (\n        [string]$Message\n    )\n\n    $timestamp = Get-Date -Format \"yyyy-MM-dd HH:mm:ss\"\n    \"$timestamp $Message\" | Out-File -FilePath $logFile -Append -Encoding utf8\n    Write-Verbose -Message $Message\n}\n\nWrite-Log \"Startup script running on $env:COMPUTERNAME. Target DisabledComponents = $targetHex.\"\n\n# Unbinding IPv6 from an adapter is a separate, unsupported change. Report it, don't touch it.\n$unbound = Get-NetAdapterBinding -ComponentID ms_tcpip6 -ErrorAction SilentlyContinue | Where-Object { -not $_.Enabled }\n\nforeach ($binding in $unbound) {\n    Write-Log \"WARNING: IPv6 (ms_tcpip6) is unbound on adapter '$($binding.Name)'. Microsoft does not support this; re-enable with Enable-NetAdapterBinding.\"\n}\n\n# Read the current value. A missing value means the Windows default (0).\n$currentValue = $null\n$property = Get-ItemProperty -Path $regPath -Name $regName -ErrorAction SilentlyContinue\n\nif ($property) {\n    # A REG_DWORD comes back as a signed Int32, so 0xFFFFFFFF reads as -1.\n    $currentValue = [int64]$property.$regName\n\n    if ($currentValue -lt 0) {\n        $currentValue += 4294967296\n    }\n}\n\nif ($currentValue -eq 4294967295) {\n    Write-Log \"DisabledComponents is 0xFFFFFFFF, which Microsoft documents as incorrect (it adds a 5-second startup delay). Correcting it.\"\n}\n\n$currentHex = if ($null -eq $currentValue) { \"\u003Cnot set>\" } else { \"0x{0:X2}\" -f $currentValue }\n\nif ($currentValue -eq $DisabledComponentsValue) {\n    Write-Log \"DisabledComponents already $targetHex. No change made.\"\n    exit 0\n}\n\nif ($null -eq $currentValue -and $DisabledComponentsValue -eq 0) {\n    Write-Log \"DisabledComponents not set, which is already the default. No change made.\"\n    exit 0\n}\n\nif ($DisabledComponentsValue -notin @(0, 32)) {\n    Write-Log \"WARNING: $targetHex is outside 0 and 0x20. Microsoft documents that such values make the Routing and Remote Access service fail.\"\n}\n\ntry {\n    New-ItemProperty -Path $regPath -Name $regName -Value $DisabledComponentsValue -PropertyType DWord -Force -ErrorAction Stop | Out-Null\n    Write-Log \"DisabledComponents changed from $currentHex to $targetHex. Restart required.\"\n    exit 3010\n} catch {\n    Write-Log \"Failed to set DisabledComponents: $($_.Exception.Message)\"\n    exit 1\n}\n",[24,459,460,466,473,478,486,492,498,504,510,516,522,528,534,545,551,557,563,573,579,587,593,600,606,614,620,626,632,640,646,652,659,671,680,691,727,745,750,759,774,780,785,796,807,824,829,850,877,883,888,927,932,945,953,964,970,975,993,1028,1039,1044,1049,1075,1080,1086,1123,1128,1143,1164,1169,1174,1180,1191,1217,1222,1230,1236,1253,1258,1276,1288,1294,1299,1304,1319,1327,1332,1337,1378,1383,1395,1408,1417,1422,1427,1453,1461,1468,1473,1478,1503,1516,1521,1526,1534,1571,1590,1598,1609,1632,1640],{"__ignoreMap":208},[212,461,462],{"class":214,"line":215},[212,463,465],{"class":464},"sAwPA","\u003C#\n",[212,467,468,470],{"class":214,"line":232},[212,469,45],{"class":221},[212,471,472],{"class":225},"SYNOPSIS\n",[212,474,475],{"class":214,"line":252},[212,476,477],{"class":464},"    Sets the Tcpip6 DisabledComponents value from a Group Policy startup script.\n",[212,479,481,483],{"class":214,"line":480},4,[212,482,45],{"class":221},[212,484,485],{"class":225},"DESCRIPTION\n",[212,487,489],{"class":214,"line":488},5,[212,490,491],{"class":464},"    Writes the DisabledComponents DWORD under\n",[212,493,495],{"class":214,"line":494},6,[212,496,497],{"class":464},"    HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters. The default, 0x20,\n",[212,499,501],{"class":214,"line":500},7,[212,502,503],{"class":464},"    is Microsoft's recommended \"Prefer IPv4 over IPv6\" prefix policy, which keeps\n",[212,505,507],{"class":214,"line":506},8,[212,508,509],{"class":464},"    the IPv6 stack running. 0xFF disables IPv6 on all interfaces except loopback,\n",[212,511,513],{"class":214,"line":512},9,[212,514,515],{"class":464},"    which Microsoft does not recommend. The script only writes the registry when\n",[212,517,519],{"class":214,"line":518},10,[212,520,521],{"class":464},"    the current value differs, warns about adapters where IPv6 has been unbound\n",[212,523,525],{"class":214,"line":524},11,[212,526,527],{"class":464},"    (an unsupported configuration), and logs every run to a local file. It runs\n",[212,529,531],{"class":214,"line":530},12,[212,532,533],{"class":464},"    on every boot, so machines that were offline at rollout pick it up later.\n",[212,535,537,539,542],{"class":214,"line":536},13,[212,538,45],{"class":221},[212,540,541],{"class":225},"PARAMETER",[212,543,544],{"class":225}," DisabledComponentsValue\n",[212,546,548],{"class":214,"line":547},14,[212,549,550],{"class":464},"    DWORD to write. 0 (default Windows behaviour, rollback), 1 (0x01, disable\n",[212,552,554],{"class":214,"line":553},15,[212,555,556],{"class":464},"    tunnel interfaces), 32 (0x20, prefer IPv4), 33 (0x21, prefer IPv4 and\n",[212,558,560],{"class":214,"line":559},16,[212,561,562],{"class":464},"    disable tunnels) or 255 (0xFF, disable IPv6 except loopback). Default 32.\n",[212,564,566,568,570],{"class":214,"line":565},17,[212,567,45],{"class":221},[212,569,541],{"class":225},[212,571,572],{"class":225}," LogPath\n",[212,574,576],{"class":214,"line":575},18,[212,577,578],{"class":464},"    Folder for the per-day log file. Default C:\\ProgramData\\GPStartupLogs.\n",[212,580,582,584],{"class":214,"line":581},19,[212,583,45],{"class":221},[212,585,586],{"class":225},"EXAMPLE\n",[212,588,590],{"class":214,"line":589},20,[212,591,592],{"class":464},"    .\\Set-Ipv6DisabledComponents.ps1\n",[212,594,596,598],{"class":214,"line":595},21,[212,597,45],{"class":221},[212,599,586],{"class":225},[212,601,603],{"class":214,"line":602},22,[212,604,605],{"class":464},"    .\\Set-Ipv6DisabledComponents.ps1 -DisabledComponentsValue 255 -LogPath \"C:\\Logs\\Ipv6\"\n",[212,607,609,611],{"class":214,"line":608},23,[212,610,45],{"class":221},[212,612,613],{"class":225},"NOTES\n",[212,615,617],{"class":214,"line":616},24,[212,618,619],{"class":464},"    Author  : Thomas Lasswell (https:\u002F\u002Fwww.techcolumnist.com)\n",[212,621,623],{"class":214,"line":622},25,[212,624,625],{"class":464},"    Version : 1.0 (2025-04-03)\n",[212,627,629],{"class":214,"line":628},26,[212,630,631],{"class":464},"    Requires: Windows PowerShell 5.1, NetAdapter module, run as SYSTEM or Administrator\n",[212,633,635,637],{"class":214,"line":634},27,[212,636,45],{"class":221},[212,638,639],{"class":225},"LINK\n",[212,641,643],{"class":214,"line":642},28,[212,644,645],{"class":464},"    https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Ftroubleshoot\u002Fwindows-server\u002Fnetworking\u002Fconfigure-ipv6-in-windows\n",[212,647,649],{"class":214,"line":648},29,[212,650,651],{"class":464},"#>\n",[212,653,655],{"class":214,"line":654},30,[212,656,658],{"emptyLinePlaceholder":657},true,"\n",[212,660,662,665,668],{"class":214,"line":661},31,[212,663,664],{"class":218},"[",[212,666,667],{"class":221},"CmdletBinding",[212,669,670],{"class":218},"()]\n",[212,672,674,677],{"class":214,"line":673},32,[212,675,676],{"class":225},"param",[212,678,679],{"class":218}," (\n",[212,681,683,686,689],{"class":214,"line":682},33,[212,684,685],{"class":218},"    [",[212,687,688],{"class":221},"Parameter",[212,690,670],{"class":218},[212,692,694,696,699,701,703,706,709,711,714,716,719,721,724],{"class":214,"line":693},34,[212,695,685],{"class":218},[212,697,698],{"class":221},"ValidateSet",[212,700,268],{"class":218},[212,702,141],{"class":221},[212,704,705],{"class":225},",",[212,707,708],{"class":221}," 1",[212,710,705],{"class":225},[212,712,713],{"class":221}," 32",[212,715,705],{"class":225},[212,717,718],{"class":221}," 33",[212,720,705],{"class":225},[212,722,723],{"class":221}," 255",[212,725,726],{"class":218},")]\n",[212,728,730,732,734,737,740,742],{"class":214,"line":729},35,[212,731,685],{"class":218},[212,733,122],{"class":225},[212,735,736],{"class":218},"]$DisabledComponentsValue ",[212,738,739],{"class":225},"=",[212,741,713],{"class":221},[212,743,744],{"class":225},",\n",[212,746,748],{"class":214,"line":747},36,[212,749,658],{"emptyLinePlaceholder":657},[212,751,753,755,757],{"class":214,"line":752},37,[212,754,685],{"class":218},[212,756,688],{"class":221},[212,758,670],{"class":218},[212,760,762,764,766,769,771],{"class":214,"line":761},38,[212,763,685],{"class":218},[212,765,177],{"class":225},[212,767,768],{"class":218},"]$LogPath ",[212,770,739],{"class":225},[212,772,773],{"class":243}," \"C:\\ProgramData\\GPStartupLogs\"\n",[212,775,777],{"class":214,"line":776},39,[212,778,779],{"class":218},")\n",[212,781,783],{"class":214,"line":782},40,[212,784,658],{"emptyLinePlaceholder":657},[212,786,788,791,793],{"class":214,"line":787},41,[212,789,790],{"class":218},"$regPath ",[212,792,739],{"class":225},[212,794,795],{"class":243}," \"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters\"\n",[212,797,799,802,804],{"class":214,"line":798},42,[212,800,801],{"class":218},"$regName ",[212,803,739],{"class":225},[212,805,806],{"class":243}," \"DisabledComponents\"\n",[212,808,810,813,815,818,821],{"class":214,"line":809},43,[212,811,812],{"class":218},"$targetHex ",[212,814,739],{"class":225},[212,816,817],{"class":243}," \"0x{0:X2}\"",[212,819,820],{"class":225}," -f",[212,822,823],{"class":218}," $DisabledComponentsValue\n",[212,825,827],{"class":214,"line":826},44,[212,828,658],{"emptyLinePlaceholder":657},[212,830,832,835,837,840,842,845,847],{"class":214,"line":831},45,[212,833,834],{"class":225},"if",[212,836,135],{"class":218},[212,838,839],{"class":225},"-not",[212,841,135],{"class":218},[212,843,844],{"class":221},"Test-Path",[212,846,226],{"class":225},[212,848,849],{"class":218},"Path $LogPath)) {\n",[212,851,853,856,858,861,863,866,868,871,874],{"class":214,"line":852},46,[212,854,855],{"class":221},"    New-Item",[212,857,226],{"class":225},[212,859,860],{"class":218},"Path $LogPath ",[212,862,444],{"class":225},[212,864,865],{"class":218},"ItemType Directory ",[212,867,444],{"class":225},[212,869,870],{"class":218},"Force ",[212,872,873],{"class":225},"|",[212,875,876],{"class":221}," Out-Null\n",[212,878,880],{"class":214,"line":879},47,[212,881,882],{"class":218},"}\n",[212,884,886],{"class":214,"line":885},48,[212,887,658],{"emptyLinePlaceholder":657},[212,889,891,894,896,899,901,903,905,908,911,913,915,917,919,921,923,925],{"class":214,"line":890},49,[212,892,893],{"class":218},"$logFile ",[212,895,739],{"class":225},[212,897,898],{"class":221}," Join-Path",[212,900,226],{"class":225},[212,902,860],{"class":218},[212,904,444],{"class":225},[212,906,907],{"class":218},"ChildPath ",[212,909,910],{"class":243},"\"Set-Ipv6DisabledComponents-",[212,912,265],{"class":225},[212,914,268],{"class":243},[212,916,271],{"class":221},[212,918,226],{"class":225},[212,920,276],{"class":243},[212,922,279],{"class":243},[212,924,282],{"class":243},[212,926,285],{"class":243},[212,928,930],{"class":214,"line":929},50,[212,931,658],{"emptyLinePlaceholder":657},[212,933,935,938,942],{"class":214,"line":934},51,[212,936,937],{"class":225},"function",[212,939,941],{"class":940},"svObZ"," Write-Log",[212,943,944],{"class":218}," {\n",[212,946,948,951],{"class":214,"line":947},52,[212,949,950],{"class":225},"    param",[212,952,679],{"class":218},[212,954,956,959,961],{"class":214,"line":955},53,[212,957,958],{"class":218},"        [",[212,960,177],{"class":225},[212,962,963],{"class":218},"]$Message\n",[212,965,967],{"class":214,"line":966},54,[212,968,969],{"class":218},"    )\n",[212,971,973],{"class":214,"line":972},55,[212,974,658],{"emptyLinePlaceholder":657},[212,976,978,981,983,986,988,990],{"class":214,"line":977},56,[212,979,980],{"class":218},"    $timestamp ",[212,982,739],{"class":225},[212,984,985],{"class":221}," Get-Date",[212,987,226],{"class":225},[212,989,276],{"class":218},[212,991,992],{"class":243},"\"yyyy-MM-dd HH:mm:ss\"\n",[212,994,996,999,1002,1005,1008,1010,1013,1015,1018,1020,1023,1025],{"class":214,"line":995},57,[212,997,998],{"class":243},"    \"",[212,1000,1001],{"class":218},"$timestamp",[212,1003,1004],{"class":218}," $Message",[212,1006,1007],{"class":243},"\"",[212,1009,390],{"class":225},[212,1011,1012],{"class":221}," Out-File",[212,1014,226],{"class":225},[212,1016,1017],{"class":218},"FilePath $logFile ",[212,1019,444],{"class":225},[212,1021,1022],{"class":218},"Append ",[212,1024,444],{"class":225},[212,1026,1027],{"class":218},"Encoding utf8\n",[212,1029,1031,1034,1036],{"class":214,"line":1030},58,[212,1032,1033],{"class":221},"    Write-Verbose",[212,1035,226],{"class":225},[212,1037,1038],{"class":218},"Message $Message\n",[212,1040,1042],{"class":214,"line":1041},59,[212,1043,882],{"class":218},[212,1045,1047],{"class":214,"line":1046},60,[212,1048,658],{"emptyLinePlaceholder":657},[212,1050,1052,1055,1058,1060,1063,1066,1069,1072],{"class":214,"line":1051},61,[212,1053,1054],{"class":221},"Write-Log",[212,1056,1057],{"class":243}," \"Startup script running on ",[212,1059,265],{"class":218},[212,1061,1062],{"class":221},"env:",[212,1064,1065],{"class":218},"COMPUTERNAME",[212,1067,1068],{"class":243},". Target DisabledComponents = ",[212,1070,1071],{"class":218},"$targetHex",[212,1073,1074],{"class":243},".\"\n",[212,1076,1078],{"class":214,"line":1077},62,[212,1079,658],{"emptyLinePlaceholder":657},[212,1081,1083],{"class":214,"line":1082},63,[212,1084,1085],{"class":464},"# Unbinding IPv6 from an adapter is a separate, unsupported change. Report it, don't touch it.\n",[212,1087,1089,1092,1094,1097,1099,1102,1104,1107,1109,1112,1115,1117,1120],{"class":214,"line":1088},64,[212,1090,1091],{"class":218},"$unbound ",[212,1093,739],{"class":225},[212,1095,1096],{"class":221}," Get-NetAdapterBinding",[212,1098,226],{"class":225},[212,1100,1101],{"class":218},"ComponentID ms_tcpip6 ",[212,1103,444],{"class":225},[212,1105,1106],{"class":218},"ErrorAction SilentlyContinue ",[212,1108,873],{"class":225},[212,1110,1111],{"class":221}," Where-Object",[212,1113,1114],{"class":218}," { ",[212,1116,839],{"class":225},[212,1118,1119],{"class":221}," $_",[212,1121,1122],{"class":218},".Enabled }\n",[212,1124,1126],{"class":214,"line":1125},65,[212,1127,658],{"emptyLinePlaceholder":657},[212,1129,1131,1134,1137,1140],{"class":214,"line":1130},66,[212,1132,1133],{"class":225},"foreach",[212,1135,1136],{"class":218}," ($binding ",[212,1138,1139],{"class":225},"in",[212,1141,1142],{"class":218}," $unbound) {\n",[212,1144,1146,1149,1152,1154,1156,1159,1161],{"class":214,"line":1145},67,[212,1147,1148],{"class":221},"    Write-Log",[212,1150,1151],{"class":243}," \"WARNING: IPv6 (ms_tcpip6) is unbound on adapter '",[212,1153,265],{"class":225},[212,1155,268],{"class":243},[212,1157,1158],{"class":218},"$binding.Name",[212,1160,282],{"class":243},[212,1162,1163],{"class":243},"'. Microsoft does not support this; re-enable with Enable-NetAdapterBinding.\"\n",[212,1165,1167],{"class":214,"line":1166},68,[212,1168,882],{"class":218},[212,1170,1172],{"class":214,"line":1171},69,[212,1173,658],{"emptyLinePlaceholder":657},[212,1175,1177],{"class":214,"line":1176},70,[212,1178,1179],{"class":464},"# Read the current value. A missing value means the Windows default (0).\n",[212,1181,1183,1186,1188],{"class":214,"line":1182},71,[212,1184,1185],{"class":218},"$currentValue ",[212,1187,739],{"class":225},[212,1189,1190],{"class":221}," $null\n",[212,1192,1194,1197,1199,1202,1204,1207,1209,1212,1214],{"class":214,"line":1193},72,[212,1195,1196],{"class":218},"$property ",[212,1198,739],{"class":225},[212,1200,1201],{"class":221}," Get-ItemProperty",[212,1203,226],{"class":225},[212,1205,1206],{"class":218},"Path $regPath ",[212,1208,444],{"class":225},[212,1210,1211],{"class":218},"Name $regName ",[212,1213,444],{"class":225},[212,1215,1216],{"class":218},"ErrorAction SilentlyContinue\n",[212,1218,1220],{"class":214,"line":1219},73,[212,1221,658],{"emptyLinePlaceholder":657},[212,1223,1225,1227],{"class":214,"line":1224},74,[212,1226,834],{"class":225},[212,1228,1229],{"class":218}," ($property) {\n",[212,1231,1233],{"class":214,"line":1232},75,[212,1234,1235],{"class":464},"    # A REG_DWORD comes back as a signed Int32, so 0xFFFFFFFF reads as -1.\n",[212,1237,1239,1242,1244,1247,1250],{"class":214,"line":1238},76,[212,1240,1241],{"class":218},"    $currentValue ",[212,1243,739],{"class":225},[212,1245,1246],{"class":218}," [",[212,1248,1249],{"class":225},"int64",[212,1251,1252],{"class":218},"]$property.$regName\n",[212,1254,1256],{"class":214,"line":1255},77,[212,1257,658],{"emptyLinePlaceholder":657},[212,1259,1261,1264,1267,1270,1273],{"class":214,"line":1260},78,[212,1262,1263],{"class":225},"    if",[212,1265,1266],{"class":218}," ($currentValue ",[212,1268,1269],{"class":225},"-lt",[212,1271,1272],{"class":221}," 0",[212,1274,1275],{"class":218},") {\n",[212,1277,1279,1282,1285],{"class":214,"line":1278},79,[212,1280,1281],{"class":218},"        $currentValue ",[212,1283,1284],{"class":225},"+=",[212,1286,1287],{"class":221}," 4294967296\n",[212,1289,1291],{"class":214,"line":1290},80,[212,1292,1293],{"class":218},"    }\n",[212,1295,1297],{"class":214,"line":1296},81,[212,1298,882],{"class":218},[212,1300,1302],{"class":214,"line":1301},82,[212,1303,658],{"emptyLinePlaceholder":657},[212,1305,1307,1309,1311,1314,1317],{"class":214,"line":1306},83,[212,1308,834],{"class":225},[212,1310,1266],{"class":218},[212,1312,1313],{"class":225},"-eq",[212,1315,1316],{"class":221}," 4294967295",[212,1318,1275],{"class":218},[212,1320,1322,1324],{"class":214,"line":1321},84,[212,1323,1148],{"class":221},[212,1325,1326],{"class":243}," \"DisabledComponents is 0xFFFFFFFF, which Microsoft documents as incorrect (it adds a 5-second startup delay). Correcting it.\"\n",[212,1328,1330],{"class":214,"line":1329},85,[212,1331,882],{"class":218},[212,1333,1335],{"class":214,"line":1334},86,[212,1336,658],{"emptyLinePlaceholder":657},[212,1338,1340,1343,1345,1348,1350,1353,1356,1359,1362,1365,1368,1370,1373,1375],{"class":214,"line":1339},87,[212,1341,1342],{"class":218},"$currentHex ",[212,1344,739],{"class":225},[212,1346,1347],{"class":225}," if",[212,1349,135],{"class":218},[212,1351,1352],{"class":221},"$null",[212,1354,1355],{"class":225}," -eq",[212,1357,1358],{"class":218}," $currentValue) { ",[212,1360,1361],{"class":243},"\"\u003Cnot set>\"",[212,1363,1364],{"class":218}," } ",[212,1366,1367],{"class":225},"else",[212,1369,1114],{"class":218},[212,1371,1372],{"class":243},"\"0x{0:X2}\"",[212,1374,820],{"class":225},[212,1376,1377],{"class":218}," $currentValue }\n",[212,1379,1381],{"class":214,"line":1380},88,[212,1382,658],{"emptyLinePlaceholder":657},[212,1384,1386,1388,1390,1392],{"class":214,"line":1385},89,[212,1387,834],{"class":225},[212,1389,1266],{"class":218},[212,1391,1313],{"class":225},[212,1393,1394],{"class":218}," $DisabledComponentsValue) {\n",[212,1396,1398,1400,1403,1405],{"class":214,"line":1397},90,[212,1399,1148],{"class":221},[212,1401,1402],{"class":243}," \"DisabledComponents already ",[212,1404,1071],{"class":218},[212,1406,1407],{"class":243},". No change made.\"\n",[212,1409,1411,1414],{"class":214,"line":1410},91,[212,1412,1413],{"class":225},"    exit",[212,1415,1416],{"class":221}," 0\n",[212,1418,1420],{"class":214,"line":1419},92,[212,1421,882],{"class":218},[212,1423,1425],{"class":214,"line":1424},93,[212,1426,658],{"emptyLinePlaceholder":657},[212,1428,1430,1432,1434,1436,1438,1441,1444,1447,1449,1451],{"class":214,"line":1429},94,[212,1431,834],{"class":225},[212,1433,135],{"class":218},[212,1435,1352],{"class":221},[212,1437,1355],{"class":225},[212,1439,1440],{"class":218}," $currentValue ",[212,1442,1443],{"class":225},"-and",[212,1445,1446],{"class":218}," $DisabledComponentsValue ",[212,1448,1313],{"class":225},[212,1450,1272],{"class":221},[212,1452,1275],{"class":218},[212,1454,1456,1458],{"class":214,"line":1455},95,[212,1457,1148],{"class":221},[212,1459,1460],{"class":243}," \"DisabledComponents not set, which is already the default. No change made.\"\n",[212,1462,1464,1466],{"class":214,"line":1463},96,[212,1465,1413],{"class":225},[212,1467,1416],{"class":221},[212,1469,1471],{"class":214,"line":1470},97,[212,1472,882],{"class":218},[212,1474,1476],{"class":214,"line":1475},98,[212,1477,658],{"emptyLinePlaceholder":657},[212,1479,1481,1483,1486,1489,1492,1494,1496,1498,1500],{"class":214,"line":1480},99,[212,1482,834],{"class":225},[212,1484,1485],{"class":218}," ($DisabledComponentsValue ",[212,1487,1488],{"class":225},"-notin",[212,1490,1491],{"class":225}," @",[212,1493,268],{"class":218},[212,1495,141],{"class":221},[212,1497,705],{"class":225},[212,1499,713],{"class":221},[212,1501,1502],{"class":218},")) {\n",[212,1504,1506,1508,1511,1513],{"class":214,"line":1505},100,[212,1507,1148],{"class":221},[212,1509,1510],{"class":243}," \"WARNING: ",[212,1512,1071],{"class":218},[212,1514,1515],{"class":243}," is outside 0 and 0x20. Microsoft documents that such values make the Routing and Remote Access service fail.\"\n",[212,1517,1519],{"class":214,"line":1518},101,[212,1520,882],{"class":218},[212,1522,1524],{"class":214,"line":1523},102,[212,1525,658],{"emptyLinePlaceholder":657},[212,1527,1529,1532],{"class":214,"line":1528},103,[212,1530,1531],{"class":225},"try",[212,1533,944],{"class":218},[212,1535,1537,1540,1542,1544,1546,1548,1550,1553,1555,1558,1560,1562,1564,1567,1569],{"class":214,"line":1536},104,[212,1538,1539],{"class":221},"    New-ItemProperty",[212,1541,226],{"class":225},[212,1543,1206],{"class":218},[212,1545,444],{"class":225},[212,1547,1211],{"class":218},[212,1549,444],{"class":225},[212,1551,1552],{"class":218},"Value $DisabledComponentsValue ",[212,1554,444],{"class":225},[212,1556,1557],{"class":218},"PropertyType DWord ",[212,1559,444],{"class":225},[212,1561,870],{"class":218},[212,1563,444],{"class":225},[212,1565,1566],{"class":218},"ErrorAction Stop ",[212,1568,873],{"class":225},[212,1570,876],{"class":221},[212,1572,1574,1576,1579,1582,1585,1587],{"class":214,"line":1573},105,[212,1575,1148],{"class":221},[212,1577,1578],{"class":243}," \"DisabledComponents changed from ",[212,1580,1581],{"class":218},"$currentHex",[212,1583,1584],{"class":243}," to ",[212,1586,1071],{"class":218},[212,1588,1589],{"class":243},". Restart required.\"\n",[212,1591,1593,1595],{"class":214,"line":1592},106,[212,1594,1413],{"class":225},[212,1596,1597],{"class":221}," 3010\n",[212,1599,1601,1604,1607],{"class":214,"line":1600},107,[212,1602,1603],{"class":218},"} ",[212,1605,1606],{"class":225},"catch",[212,1608,944],{"class":218},[212,1610,1612,1614,1617,1619,1621,1624,1627,1629],{"class":214,"line":1611},108,[212,1613,1148],{"class":221},[212,1615,1616],{"class":243}," \"Failed to set DisabledComponents: ",[212,1618,265],{"class":225},[212,1620,268],{"class":243},[212,1622,1623],{"class":221},"$_",[212,1625,1626],{"class":218},".Exception.Message",[212,1628,282],{"class":243},[212,1630,1631],{"class":243},"\"\n",[212,1633,1635,1637],{"class":214,"line":1634},109,[212,1636,1413],{"class":225},[212,1638,1639],{"class":221}," 1\n",[212,1641,1643],{"class":214,"line":1642},110,[212,1644,882],{"class":218},[47,1646,1648],{"id":1647},"notes","Notes",[52,1650,1651,1663,1681,1701,1714,1731,1740,1743],{},[55,1652,1653,1656,1657,1659,1660,1662],{},[15,1654,1655],{},"Microsoft's position, in its own words:"," \"We don't recommend that you disable IPv6 or IPv6 components or unbind IPv6 from interfaces\" and \"We recommend using Prefer IPv4 over IPv6 in prefix policies instead of disabling IPv6.\" That is why the default here is ",[24,1658,34],{},". ",[24,1661,38],{}," is supported as a registry setting, but when you open a case Microsoft may ask you to re-enable IPv6 before troubleshooting.",[55,1664,1665,1673,1674,1676,1677,1680],{},[15,1666,1667,1669,1670,45],{},[24,1668,38],{},", not ",[24,1671,1672],{},"0xFFFFFFFF"," The KB states the correct full-disable value is ",[24,1675,38],{},"; setting ",[24,1678,1679],{},"0xffffffff"," delays startup by five seconds. The script detects and overwrites the wrong value.",[55,1682,1683,1686,1687,1689,1690,1692,1693,1695,1696,1689,1698,1700],{},[15,1684,1685],{},"RRAS."," The KB warns that values other than ",[24,1688,141],{}," or ",[24,1691,134],{}," make the Routing and Remote Access service fail. Keep RRAS servers (including DirectAccess and VPN servers built on it) out of any GPO that sets ",[24,1694,148],{},", ",[24,1697,160],{},[24,1699,38],{},", for example with a security-group or WMI filter.",[55,1702,1703,1706,1707,1709,1710,1713],{},[15,1704,1705],{},"Loopback survives."," Even at ",[24,1708,38],{}," you \"cannot completely disable IPv6 as IPv6 is used internally on the system for many TCPIP tasks\"; ",[24,1711,1712],{},"ping ::1"," still answers. That is by design.",[55,1715,1716,1719,1720,1722,1723,1726,1727,1730],{},[15,1717,1718],{},"The checkbox lies."," ",[24,1721,26],{}," doesn't change the \"Internet Protocol Version 6 (TCP\u002FIPv6)\" checkbox on the adapter; the box can stay ticked while IPv6 is disabled. Check the registry value and ",[24,1724,1725],{},"netsh interface ipv6 show prefixpolicies",", not the GUI. Conversely, unticking the box (or ",[24,1728,1729],{},"Disable-NetAdapterBinding -ComponentID ms_tcpip6",") is the unbinding Microsoft calls potentially \"an unsupported Windows configuration\", which is why the script only reports it.",[55,1732,1733,1736,1737,1739],{},[15,1734,1735],{},"Tunnels only."," If the actual complaint is stray 6to4 addresses (Windows enables 6to4 when an interface has a public IPv4 address and registers those addresses in DNS), ",[24,1738,148],{}," or the Group Policy settings under Computer Configuration > Administrative Templates > Network > TCPIP Settings > IPv6 Transition Technologies (6to4, ISATAP and Teredo State = Disabled) solve it without touching native IPv6. ISATAP and Teredo are already disabled by default.",[55,1741,1742],{},"Microsoft's KB lists known casualties of disabling IPv6: LDAP over UDP 389 on domain controllers, Exchange Server, and failover clusters. Pilot on a small OU and keep domain controllers, Exchange, cluster nodes and RRAS servers out of the first waves.",[55,1744,1745,1746,1749],{},"Exit code ",[24,1747,1748],{},"3010"," is the conventional \"success, restart required\" code from Windows Installer. Group Policy ignores it, but it is useful if an RMM or ConfigMgr run of the same script reads the exit code.",[47,1751,1753],{"id":1752},"source","Source",[52,1755,1756,1764,1770,1776,1783],{},[55,1757,1758],{},[41,1759,1763],{"href":1760,"rel":1761},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Ftroubleshoot\u002Fwindows-server\u002Fnetworking\u002Fconfigure-ipv6-in-windows",[1762],"nofollow","Configure IPv6 for advanced users in Windows (KB 929852)",[55,1765,1766],{},[41,1767,60],{"href":1768,"rel":1769},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fpowershell\u002Fmodule\u002Fnetadapter\u002Fget-netadapterbinding",[1762],[55,1771,1772],{},[41,1773,414],{"href":1774,"rel":1775},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fpowershell\u002Fmodule\u002Fgrouppolicy\u002Fset-gpregistryvalue",[1762],[55,1777,1778],{},[41,1779,1782],{"href":1780,"rel":1781},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fpowershell\u002Fmodule\u002Fgrouppolicy\u002Fnew-gplink",[1762],"New-GPLink",[55,1784,1785],{},[41,1786,1789],{"href":1787,"rel":1788},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Farchive\u002Fblogs\u002Fnetro\u002Farguments-against-disabling-ipv6",[1762],"Arguments against disabling IPv6 (Microsoft networking blog archive)",[1791,1792,1793],"style",{},"html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}",{"title":208,"searchDepth":232,"depth":232,"links":1795},[1796,1797,1798,1799,1800,1801],{"id":49,"depth":232,"text":50},{"id":85,"depth":232,"text":86},{"id":197,"depth":232,"text":198},{"id":453,"depth":232,"text":454},{"id":1647,"depth":232,"text":1648},{"id":1752,"depth":232,"text":1753},"techcolumnist",[1804,1805],"ps","scripts","2025-04-03T14:00:00Z","A Group Policy startup script that sets the Tcpip6 DisabledComponents value (prefer IPv4 by default, full disable on request) with logging, binding checks and rollback.","md",false,null,{},"\u002Fblog\u002F2025\u002F04\u002F03\u002Fpowershell-windows-disable-ipv6-fleet-wide-via-group-policy-startup-script",{"title":6,"description":1807},[1802],"blog\u002F2025\u002F04\u002F03\u002Fpowershell-windows-disable-ipv6-fleet-wide-via-group-policy-startup-script",[207,1817,1818,1819],"windows","ipv6","gpo","\u002F2025\u002F04\u002F03\u002Fpowershell-windows-disable-ipv6-fleet-wide-via-group-policy-startup-script\u002F","RwwAPE44It_x62kumi9Qun4IsjyXXJrEfdjSZ8g7Ptk",{"title":1823,"description":1824,"date":1825,"url":1826,"categories":1827,"tags":1828,"image":1810,"readingTime":480,"canonical":1802,"sites":1831,"series":1810,"seriesOrder":1810},"PowerShell: Windows Server – Tune the TCP Stack for 10GbE Workloads","A PowerShell script that audits and tunes RSS, RSC, checksum\u002FLSO offloads, jumbo frames and TCP autotuning on Windows Server 10GbE adapters, and flags ignored legacy tweaks.","2025-04-10T14:00:00Z","\u002F2025\u002F04\u002F10\u002Fpowershell-windows-server-optimize-the-tcp-stack-for-10gbe-workloads\u002F",[1804,1805],[207,1817,1829,1830],"tcp","network",[1802],{"title":1833,"description":1834,"date":1835,"url":1836,"categories":1837,"tags":1839,"image":1840,"readingTime":536,"canonical":1841,"sites":1842,"series":1810,"seriesOrder":1810},"Customer-Centric Innovation: Leveraging Feedback for Product Development","In today’s fast-paced, competitive market, the key to sustainable success lies in the ability to innovate continuously.","2024-07-16T01:36:08Z","\u002F2024\u002F07\u002F16\u002Fcustomer-centric-innovation-leveraging-feedback-for-product-development\u002F",[1838],"strategy",[],"\u002Fuploads\u002F2024\u002F07\u002FDALL%C2%B7E-2024-07-15-21.29.11-A-visually-engaging-header-image-for-an-article-titled-Customer-Centric-Innovation_-Leveraging-Feedback-for-Product-Development.-The-image-should-fe.webp","lasswell",[1841,1802],[1844,1852,1863],{"title":1845,"description":1846,"date":1847,"url":1848,"categories":1849,"tags":1850,"image":1810,"readingTime":480,"canonical":1802,"sites":1851,"series":1810,"seriesOrder":1810},"PowerShell: Windows Server – Disable SMBv1 Fleet-Wide and Verify","A script that audits SMBv1 access (event 3000), disables the SMBv1 server and optional feature across Windows servers, and reports which ones still need a restart.","2025-11-26T14:00:00Z","\u002F2025\u002F11\u002F26\u002Fpowershell-windows-server-disable-smbv1-fleet-wide-and-verify-it-stuck\u002F",[1804,1805],[207,1817],[1802],{"title":1853,"description":1854,"date":1855,"url":1856,"categories":1857,"tags":1858,"image":1810,"readingTime":488,"canonical":1802,"sites":1862,"series":1810,"seriesOrder":1810},"PowerShell: Windows 11 – Strip Preinstalled Apps from an Image","A PowerShell script that removes provisioned apps from a mounted Windows 11 WIM or a running system, plus the Windows 11 24H2+ policy that does it natively.","2025-11-05T14:00:00Z","\u002F2025\u002F11\u002F05\u002Fpowershell-windows-11-strip-preinstalled-apps-from-a-deployment-image\u002F",[1804,1805],[207,1859,1860,1819,1861],"windows-11","debloat","intune",[1802],{"title":1864,"description":1865,"date":1866,"url":1867,"categories":1868,"tags":1869,"image":1810,"readingTime":488,"canonical":1802,"sites":1872,"series":1810,"seriesOrder":1810},"PowerShell: Windows – Discover Local Admins Across Every Workstation","A script that reads the local Administrators group on every workstation by SID, survives orphaned-SID errors, and flags members outside an approved allowlist.","2025-10-08T14:00:00Z","\u002F2025\u002F10\u002F08\u002Fpowershell-windows-discover-local-admins-across-every-workstation\u002F",[1804,1805],[207,1817,1870,1871],"discovery","active-directory",[1802],{"doc":1810,"posts":1874},[],1790052512535]