【问题标题】:Detect If IPv6 is Enabled on Windows Machines检测是否在 Windows 机器上启用了 IPv6
【发布时间】:2011-01-06 04:56:49
【问题描述】:

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

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

其他注意事项是,我不希望通过直接访问注册表来获取详细信息,也不希望从 ipconfig 等命令的输出中获取详细信息。

鉴于我们的环境混合了 2003/2008 机器,任何人都可以想出测试 IPv6 的方法吗?

干杯

【问题讨论】:

  • 如果msdn.microsoft.com/en-us/library/aa822883(VS.85).aspx 是任何东西,使用WMI 检测IPv6 的唯一方法是查看您找到的IPAddresses,即使那样,您也不能在Win2003 上使用它。据我所知,剩下的就是检查 netsh 输出(或其他一些实用程序)或挖掘注册表。

标签: windows powershell network-programming powershell-2.0 ipv6


【解决方案1】:

我知道这是一个旧线程,但我需要检查同样的事情。

要检查特定适配器的 ipv6 绑定,请使用:

 Get-NetAdapterBinding -Name 'NameOfNic' -ComponentID ms_tcpip6

这将为您提供该适配器的启用状态。

如果您只想检索该状态,您可以使用:

 (Get-NetAdapterBinding -Name 'NameOfNic' -ComponentID ms_tcpip6).Enabled

希望这会有所帮助。我确实检查了这可以追溯到 2012 年。docs.microsoft.com 没有列出低于 2012/Win8 的默认版本

【讨论】:

  • 我还需要检查与 OP 相同的事情,并且您的解决方案可能会起作用,但是 Get-NetAdapterBinding 没有 -ComputerName 开关,这使得在您想要的脚本中使用此命令很痛苦扫描所有计算机。
【解决方案2】:

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

$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】:

    测试 IPv6 通常比使用 XP 回答是/否要复杂,

    1. 是否安装了“Microsoft TCP/IP version 6”网络组件。
    2. 是否存在具有 IPv6 地址的适配器 - 通常会假设 (1) 意味着 (2)。
    3. 适配器是否具有全局范围的 IPv6,即不仅仅是链接本地 fe80:: 前缀地址或环回接口,::1。

    如 Microsoft 所示,可以使用 Powershell 脚本找到 (1):

    http://gallery.technet.microsoft.com/ScriptCenter/en-us/c4eb1596-7ac9-4be7-a711-b43446a3e3df

    【讨论】:

      【解决方案4】:

      你可以使用.NET方式:

      Write-Host 'OS Supports IPv6: ' $( [System.Net.Sockets.Socket]::OSSupportsIPv6 )
      

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

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

      如果这两个条件都成立,那么您或许可以使用Invoke-Command 来做到这一点。

      【讨论】:

      • 我认为即使某些适配器禁用了它,在大多数情况下也应该如此?
      • 这个解决方案过于乐观——它会说操作系统是否一般支持它,但如果它实际上在任何适配器上启用则不会。请参阅下面的解决方案来确定后者。
      【解决方案5】:

      如果您想专门检查 IPv6 是否已启用并正常工作,我认为最好的方法是尝试连接到测试主机。这样,您不仅会测试某些特定的软件设置,而且还会发现所有路由配置及其周围的一切都可以正常工作。

      【讨论】:

        【解决方案6】:

        我没有对此进行测试,但 .NET Socket 类具有 OSSupportsIPv6 属性。所以有点类似

        [System.Net.Sockets]::OSSupportsIPv6
        

        文档说“如果操作系统和网络适配器支持 IPv6 协议,则为 true;否则为 false。”我不清楚这是否意味着该值基于操作系统的功能或配置的用途。

        我在本地帮助中查找了此内容,因此手边没有 MSDN 链接。应该不难找。

        【讨论】:

          【解决方案7】:

          这是您不想做的,但它似乎是最好的方法,检查netsh interface 提供的输出。

          您可能想look here for what you're after。您的实现会更简单,但您只需要遍历 netsh interface ipv6 show interfaces 结果即可,如果您找到接口,则在某处启用它,如果找不到,则不是。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-07
            • 2017-02-20
            • 1970-01-01
            • 1970-01-01
            • 2012-06-14
            • 1970-01-01
            • 1970-01-01
            • 2012-03-15
            相关资源
            最近更新 更多