我正在编写一个PowerShell脚本,它将作为我们服务器的构建一致性测试。我需要做的一件事就是检测IPv6网络是否已被禁用。
WMI表示此信息可以在Win32_NetworkAdapterConfiguration的IPAddress属性中找到,但可以是IPv6或IPv4。这并没有给我一个我希望找到的“是/否”答案。
其他注意事项是,我不希望通过直接访问注册表来删除详细信息,也不会从ipconfig等命令的输出中删除。
鉴于我们的环境混合了2003/2008年的机器,谁能想到一种测试IPv6的方法?
干杯
答案 0 :(得分:7)
您可以使用.NET方式:
Write-Host 'OS Supports IPv6: ' $( [System.Net.Sockets.Socket]::OSSupportsIPv6 )
如果可以创建IPv6数据报套接字,则该属性为true。此属性还受全局machine.config文件的影响,因此IPv6状态可能并不总是准确。
编辑:要在远程计算机上进行测试,您仍然可以使用powershell,但必须安装PowerShell 2.0并启用WinRM。
如果这两个条件属实,那么你可以使用Invoke-Command来做到这一点。
答案 1 :(得分:4)
测试IPv6通常比使用XP的是/否答案更复杂,
可以使用Microsoft演示的Powershell脚本找到(1):
http://gallery.technet.microsoft.com/ScriptCenter/en-us/c4eb1596-7ac9-4be7-a711-b43446a3e3df
答案 2 :(得分:4)
实际上,一位同事想出了一个很好的方法 - 一点点笨重但有效。 :)
$IPV6 = $false
$arrInterfaces = (Get-WmiObject -class Win32_NetworkAdapterConfiguration -filter "ipenabled = TRUE").IPAddress
foreach ($i in $arrInterfaces) {$IPV6 = $IPV6 -or $i.contains(":")}
write-host $IPV6
答案 3 :(得分:2)
如果您想要专门检查IPv6是否已启用并正常工作,我想最好的方法是尝试连接到测试主机。这样,您不仅可以测试某些特定的软件设置,而且还会发现所有路由配置及其周围的所有内容都能正常运行。
答案 4 :(得分:1)
这是你不想做的事情,但它似乎是最好的方法,越过netsh interface提供的输出。
您可能需要look here for what you're after。你的实现会更简单,但迭代netsh interface ipv6 show interfaces
结果就是你所需要的,如果找到接口,它就会在某处启用,如果找不到,那就不是。
答案 5 :(得分:1)
我没有对此进行测试,但.NET Socket类具有OSSupportsIPv6属性。所以有些事情
[System.Net.Sockets]::OSSupportsIPv6
文档说“如果操作系统和网络适配器支持IPv6协议,则为true;否则为false。”我不清楚这是否意味着该值是基于操作系统的功能或配置的内容。
我在本地帮助中查看了这些内容,因此我没有方便的MSDN链接。不应该太难找到。
答案 6 :(得分:1)
我知道这是一个旧线程,但我需要检查同样的事情。
要检查特定适配器的ipv6绑定,请使用:
Get-NetAdapterBinding -Name 'NameOfNic' -ComponentID ms_tcpip6
这将为您提供该适配器的启用状态。
如果您想要检索该状态,可以使用:
(Get-NetAdapterBinding -Name 'NameOfNic' -ComponentID ms_tcpip6).Enabled
希望这会有所帮助。我确实检查过这可以追溯到2012年.docs.microsoft.com没有列出2012 / Win8默认版本以下的版本