检测Windows计算机上是否启用了IPv6
我正在编写一个powershell脚本,它将作为我们服务器的构建符合性测试。我需要做的事情之一是检测IPv6网络是否已禁用 WMI表示可以在Win32_NetworkAdapterConfiguration的IPAddress属性中找到此信息,但可以是IPv6或IPv4。这并没有给我一个我希望找到的“是/否”的答案 其他注意事项是,我不希望通过直接访问注册表来获取细节,也不希望从命令(如ipconfig)的输出中获取细节 鉴于我们的环境混合了2003/2008年的机器,有人能想出一种测试IPv6的方法吗检测Windows计算机上是否启用了IPv6,windows,powershell,network-programming,powershell-2.0,ipv6,Windows,Powershell,Network Programming,Powershell 2.0,Ipv6,我正在编写一个powershell脚本,它将作为我们服务器的构建符合性测试。我需要做的事情之一是检测IPv6网络是否已禁用 WMI表示可以在Win32_NetworkAdapterConfiguration的IPAddress属性中找到此信息,但可以是IPv6或IPv4。这并没有给我一个我希望找到的“是/否”的答案 其他注意事项是,我不希望通过直接访问注册表来获取细节,也不希望从命令(如ipconfig)的输出中获取细节 鉴于我们的环境混合了2003/2008年的机器,有人能想出一种测试IPv6
干杯这是您不想做的事情,但它似乎是最好的方法,检查提供的输出
你可能想。您的实现会更简单,但是迭代
netsh interface ipv6 show interfaces
结果就是您所需要的,如果您找到接口,它会在某个地方启用,如果您没有找到,它就不会启用。我没有测试过,但是.NET Socket类有一个OSSupportsIPv6属性。因此,一些大致的东西
[System.Net.Sockets]::OSSupportsIPv6
文档中说“如果操作系统和网络适配器支持IPv6协议,则为true;否则为false”。我不清楚这是否意味着该值基于操作系统的功能或配置
我在我的本地帮助中找到了这个,所以我手边没有MSDN链接。应该不太难找到 您可以使用.NET方式:
Write-Host 'OS Supports IPv6: ' $( [System.Net.Sockets.Socket]::OSSupportsIPv6 )
如果可以创建IPv6数据报套接字,则该属性将为true。此属性还受global machine.config文件的影响,因此IPv6状态可能并不总是准确的
编辑:要在远程计算机上测试此功能,您仍然可以使用powershell,但它必须安装powershell 2.0并启用WinRM
如果这两个条件都是真的,那么您可能可以使用来执行此操作。如果您想特别检查IPv6是否已启用并正常工作,我认为最好的方法是尝试连接到测试主机。这样,您不仅可以测试某些特定的软件设置,还可以了解所有路由配置及其周围的一切是否正常工作。IPv6测试通常比XP的“是/否”答案更复杂
事实上,一位同事想出了一个很好的方法——有点笨重,但很管用。:)
我知道这是一个旧线程,但我需要检查相同的东西 要检查特定适配器的ipv6绑定,请使用:
Get-NetAdapterBinding -Name 'NameOfNic' -ComponentID ms_tcpip6
这将为您提供该适配器的启用状态
如果只想检索该状态,可以使用:
(Get-NetAdapterBinding -Name 'NameOfNic' -ComponentID ms_tcpip6).Enabled
希望这有帮助。早在2012年,我就检查过这是否有效。docs.microsoft.com没有列出以下2012/Win8默认版本如果有什么依据,使用WMI检测IPv6的唯一方法是查看您找到的IP地址,即使这样,您也不能在Win2003上使用它。据我所知,这就只剩下检查netsh输出(或其他实用程序)或挖掘注册表。我认为在大多数情况下应该是这样的,即使certian适配器禁用了它?这个解决方案过于乐观了——它会说操作系统是否普遍支持它,但不会说它是否在任何适配器上实际启用。请参阅下面的解决方案以确定后者。我还需要检查与OP相同的内容,您的解决方案可能会起作用,但Get-NetAdapterBinding没有-ComputerName开关,这使得在要扫描所有计算机的脚本中使用此命令非常困难。
(Get-NetAdapterBinding -Name 'NameOfNic' -ComponentID ms_tcpip6).Enabled