2

Je suis en train d'écrire un script PowerShell qui servira de test de conformité de construction pour nos serveurs. Une des choses que je dois faire est de détecter si le réseau IPv6 a été désactivé. WMI indique que cette information peut être trouvée dans la propriété IPAddress de Win32_NetworkAdapterConfiguration mais peut être IPv6 ou IPv4. Cela ne me donne pas une réponse «oui/non» que j'espère trouver.Détecter si IPv6 est activé sur les machines Windows

D'autres mises en garde sont que je préférerais ne pas gratter les détails en accédant directement au registre, ni gratter à partir de la sortie d'une commande telle que ipconfig. Compte tenu de notre environnement a un mélange de machines 2003/2008, quelqu'un peut-il penser à un moyen de tester IPv6?

Vive

+0

Si http://msdn.microsoft.com/en-us/library/aa822883(VS.85).aspx est quelque chose d'aller, la seule façon de détecter IPv6 à l'aide WMI est de regarder à l'IPAddresses vous trouvez, et même alors, vous ne pouvez pas l'utiliser sur Win2003. Pour autant que je sache, cela laisse vérifier la sortie netsh (ou un autre utilitaire) ou creuser dans le registre. –

Répondre

4

En fait, un collègue est venu avec une belle façon de le faire - un peu maladroit, mais des œuvres . :)

$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

C'est ce que vous ne voulez pas faire, mais il semble que la meilleure méthode, en passant sur la sortie qui fournit netsh interface.

Vous pouvez vouloir look here for what you're after. Votre implémentation serait plus simple, mais itérer sur les résultats netsh interface ipv6 show interfaces est tout ce dont vous avez besoin, si vous trouvez des interfaces, il est activé quelque part, si vous ne trouvez pas, ce n'est pas le cas.

1

Je n'ai pas testé cela, mais la classe .NET Socket a une propriété OSSupportsIPv6. Donc, quelque chose le long des lignes

[System.Net.Sockets]::OSSupportsIPv6 

La documentation dit « vrai si le système d'exploitation et les cartes réseau prennent en charge le protocole IPv6, sinon faux. » Ce n'est pas clair pour moi si cela signifie que la valeur est basée sur ce que le système d'exploitation est capable de faire ou sur ce pour quoi il est configuré. J'ai regardé cela dans mon aide locale, donc je n'ai pas de lien MSDN à portée de main. Ne devrait pas être trop difficile à trouver.

7

Vous pouvez utiliser la méthode .NET:

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

La propriété sera vrai s'il est possible de créer une socket datagramme IPv6. Cette propriété est également affectée par le fichier machine.config global, de sorte que le statut IPv6 peut ne pas toujours être précis.

Éditer: Pour tester ceci sur une machine distante, vous pouvez toujours utiliser powershell, mais Powerhell 2.0 doit être installé et WinRM doit être activé.

Si ces deux conditions sont remplies, vous pouvez probablement utiliser Invoke-Command pour cela.

+0

Je pense que cela devrait être vrai dans la plupart des cas, même si les adaptateurs certian l'ont désactivé? – klumsy

+0

Cette solution est trop optimiste - elle dira si le système d'exploitation en général le supporte, mais PAS s'il est réellement activé sur n'importe quel adaptateur. Voir la solution ci-dessous pour déterminer ce dernier. – jhclark

2

Si vous voulez vérifier spécifiquement que IPv6 est activé et fonctionne, je dirais que la meilleure façon serait d'essayer de se connecter à un hôte de test. De cette façon, vous ne testerez pas uniquement certains paramètres logiciels spécifiques, mais vous découvrirez également que toute la configuration de routage et tout ce qui s'y passe fonctionnent comme il se doit.

4

test pour IPv6 serait généralement plus complexe qu'une réponse oui/non avec XP que vous avez,

  1. est le composant réseau « Microsoft TCP/IP version 6 » installé.
  2. Y at-il un adaptateur a une adresse IPv6 - on suppose généralement (1) implique (2).
  3. Indique si un adaptateur possède un IPv6 de portée globale, par exemple.pas seulement un lien local fe80 :: adresse préfixée ou interface de bouclage, :: 1.

Presumaly (1) peut être trouvé avec un script Powershell comme démontré par Microsoft:

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

Questions connexes