检测是否在Windows计算机上启用了IPv6

Ben*_*ort 2 windows powershell network-programming ipv6 powershell-2.0

我正在编写一个PowerShell脚本,它将作为我们服务器的构建一致性测试.我需要做的一件事是检测是否已禁用IPv6网络.

WMI表示此信息可以在Win32_NetworkAdapterConfiguration的IPAddress属性中找到,但可以是IPv6或IPv4.这并没有给我一个我希望找到的"是/否"答案.

其他警告是我不希望通过直接访问注册表来刮掉细节,也不会从ipconfig等命令的输出中删除.

鉴于我们的环境混合了2003/2008年的机器,谁能想到一种测试IPv6的方法?

干杯

Jer*_*ban 7

您可以使用.NET方式:

Write-Host 'OS Supports IPv6: ' $( [System.Net.Sockets.Socket]::OSSupportsIPv6 )
Run Code Online (Sandbox Code Playgroud)

如果可以创建IPv6数据报套接字,则该属性为true.此属性还受全局machine.config文件的影响,因此IPv6状态可能并不总是准确的.

编辑:要在远程计算机上进行测试,您仍然可以使用powershell,但必须安装PowerShell 2.0并启用WinRM.

如果这两个条件都成立,那么您可以使用Invoke-Command来执行此操作.


Ben*_*ort 5

事实上,一位同事想出了一个很好的方法——有点笨拙,但很有效。:)

$IPV6 = $false
$arrInterfaces = (Get-WmiObject -class Win32_NetworkAdapterConfiguration -filter "ipenabled = TRUE").IPAddress

foreach ($i in $arrInterfaces) {$IPV6 = $IPV6 -or $i.contains(":")}

write-host $IPV6
Run Code Online (Sandbox Code Playgroud)