Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测Windows计算机上是否启用了IPv6_Windows_Powershell_Network Programming_Powershell 2.0_Ipv6 - Fatal编程技术网

检测Windows计算机上是否启用了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

我正在编写一个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地址?人们通常会认为(1)意味着(2)
  • 适配器是否具有全局作用域IPv6,即不只是链路本地fe80::前缀地址或环回接口:::1
  • 通常(1)可以通过Microsoft演示的Powershell脚本找到:


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


    我知道这是一个旧线程,但我需要检查相同的东西

    要检查特定适配器的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