2

我正在編寫一個PowerShell腳本,它將充當我們的服務器的構建一致性測試。我需要做的一件事是檢測IPv6網絡是否被禁用。如果在Windows機器上啓用IPv6,則檢測到

WMI表示該信息可以在Win32_NetworkAdapterConfiguration的IPAddress屬性中找到,但可以是IPv6或IPv4。這不會給我一個我希望找到的「是/否」的答案。

其他的注意事項是我不希望通過直接訪問註冊表來刮擦細節,也不會從ipconfig等命令的輸出中刮擦。

鑑於我們的環境混合了2003/2008機器,任何人都可以想出一種測試IPv6的方法嗎?

乾杯

+0

如果http://msdn.microsoft.com/en-us/library/aa822883(VS.85).aspx是什麼去了,只有這樣才能IPv6的使用WMI是看檢測在你找到的IPAddresses中,即使這樣,你也不能在Win2003上使用它。據我所知,這留下檢查netsh輸出(或其他實用程序)或挖掘註冊表。 – 2010-01-18 02:07:15

回答

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 
1

這是你不想做什麼,但似乎是最好的方法,去在這netsh interface提供輸出。您可能需要look here for what you're after。你的實現會更簡單,但是遍歷netsh interface ipv6 show interfaces的結果是你所需要的,如果你找到接口的話,它可以在某個地方啓用,如果你沒有找到它的話,那就不是。

1

我沒有測試過這個,但.NET Socket類有一個OSSupportsIPv6屬性。所以沿線的東西

[System.Net.Sockets]::OSSupportsIPv6 

該文檔說「如果操作系統和網絡適配器支持IPv6協議,則爲true;否則爲false」。我不清楚這是否意味着價值取決於操作系統的能力或配置。

我在本地幫助中查找了這個,所以我沒有方便的MSDN鏈接。不應該太難找到。

7

您可以使用.NET方法:如果有可能創建一個IPv6數據報套接字

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

該物業將是真實的。此屬性也受全局machine.config文件的影響,因此IPv6狀態可能並不總是準確的。

編輯:要在遠程計算機上測試此功能,仍然可以使用powershell,但必須安裝powershell 2.0,並啓用WinRM。

如果這兩個條件都是真的,那麼你可以用Invoke-Command來做到這一點。

+0

我認爲應該在大多數情況下都應該如此,即使證書適配器將其禁用了嗎? – klumsy 2011-03-17 05:44:05

+0

這個解決方案過於樂觀 - 它會說如果OS一般支持它,但不是如果它實際上在任何適配器上啓用。請參閱下面的解決方案以確定後者。 – jhclark 2015-04-02 20:29:09

2

如果您想專門檢查IPv6是否已啓用並正常工作,我會說最好的方法是嘗試連接到測試主機。這樣,你不會只是測試一些特定的軟件設置,但你也會發現,所有的路由配置和它周圍的一切工作,因爲它應該。

4

測試對IPv6通常會比一個是更復雜的/在XP沒有回答你,

  1. 是否安裝了「Microsoft TCP/IP version 6」網絡組件。
  2. 是否有適配器具有IPv6地址 - 通常假設(1)意味着(2)。
  3. 適配器是否具有全局範圍的IPv6,即不只是一個鏈接本地fe80 ::前綴地址或回送接口,:: 1。

Presumaly(1)可以用PowerShell腳本發現被微軟視爲證明:

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