Étant donné que le protocole TCP/IP est le protocole réseau le plus communément utilisé, la plupart des tâches d'administration du protocole réseau de bas niveau impliquent TCP/IP. Dans cette section, nous utilisons Windows PowerShell et WMI pour réaliser ces tâches.
Listage des adresses IP d'un ordinateur
Pour obtenir toutes les adresses IP en cours d'utilisation sur l'ordinateur local, utilisez la commande suivante :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress
La sortie de cette commande diffère de la plupart des listes de propriétés, car les valeurs figurent entre accolades :
IPAddress
---------
{192.168.1.80}
{192.168.148.1}
{192.168.171.1}
{0.0.0.0}
Pour comprendre pourquoi les accolades apparaissent, utilisez l'applet de commande Get-Member pour examiner la propriété IPAddress :
PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Get-Member -Name IPAddress
TypeName: System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapter
Configuration
Name MemberType Definition
---- ---------- ----------
IPAddress Property System.String[] IPAddress {get;}
La propriété IPAddress de chaque carte réseau est en réalité un tableau. Les accolades dans la définition indiquent que IPAddress n'est pas une valeur System.String, mais un tableau de valeurs System.String.
Listage des données de configuration IP
Pour afficher des données de configuration IP détaillées pour chaque carte réseau, utilisez la commande suivante :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .
L'affichage par défaut de l'objet de configuration des cartes réseau est un jeu très réduit des informations disponibles. Pour l'inspection détaillée et le dépannage, utilisez Select-Object ou une applet de commande de mise en forme, telle que Format-List, pour spécifier les propriétés à afficher.
Si vous n'êtes pas intéressé par les propriétés IPX ou WINS (ce qui est probablement le cas sur un réseau TCP/IP moderne), vous pouvez utiliser le paramètre ExcludeProperty de Select-Object pour masquer les propriétés dont le nom commence par « WINS » ou « IPX » :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*
Cette commande retourne des informations détaillées sur DHCP, DNS, le routage et d'autres propriétés de configuration IP mineures.
Test Ping sur des ordinateurs
Vous pouvez exécuter un test Ping simple sur un ordinateur à l'aide de Win32_PingStatus. La commande suivante effectue le test Ping, mais retourne une sortie longue :
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .
Un formulaire plus utile pour les informations résumées est un affichage des propriétés Address, ResponseTime et StatusCode, généré par la commande suivante. Le paramètre Autosize de Format-Table redimensionne les colonnes du tableau afin qu'elles s'affichent correctement dans Windows PowerShell.
PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName . | Format-Table -Property Address,ResponseTime,StatusCode -Autosize Address ResponseTime StatusCode ------- ------------ ---------- 127.0.0.1 0 0 A status code of 0 indicates a successful ping.
Vous pouvez utiliser un tableau pour effectuer un test Ping sur plusieurs ordinateurs avec une seule commande. Étant donné qu'il y a plusieurs adresses, utilisez ForEach-Object pour effectuer le test séparément pour chaque adresse :
"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode
Vous pouvez utiliser le même format de commande pour effectuer un test Ping sur tous les ordinateurs d'un sous-réseau, tel qu'un réseau privé qui utilise le numéro de réseau 192.168.1.0 et un masque de sous-réseau de classe C standard (255.255.255.0). Seules les adresses de la plage 192.168.1.1 à 192.168.1.254 sont des adresses locales légitimes (0 est toujours réservé au numéro de réseau et 255 est une adresse de diffusion de sous-réseau).
Pour représenter un tableau des numéros 1 à 254 dans Windows PowerShell, utilisez l'instruction 1..254. . Vous pouvez effectuer un test Ping complet du sous-réseau en générant le tableau puis en ajoutant les valeurs à une adresse partielle de l'instruction Ping :
1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode
Notez que cette technique de génération d'une plage d'adresses peut aussi être utilisée ailleurs. Vous pouvez générer un jeu complet d'adresses de cette manière :
$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}
Récupération de propriétés de cartes réseau
Précédemment dans ce Guide de l'utilisateur, nous avons indiqué la possibilité de récupérer des propriétés de configuration générale à l'aide de Win32_NetworkAdapterConfiguration. Bien qu'elles ne soient pas strictement TCP/IP, les informations sur les cartes réseau telles que les adresses MAC et les types de cartes peuvent servir à la compréhension de ce qui se passe sur un ordinateur. Pour obtenir un résumé de ces informations, utilisez la commande suivante :
Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .
Assignation du domaine DNS pour une carte réseau
Pour attribuer le domaine DNS pour la résolution de noms automatique, utilisez la méthode Win32_NetworkAdapterConfiguration SetDNSDomain. Étant donné que vous attribuez indépendamment le domaine DNS pour chaque configuration de carte réseau, vous devez utiliser une instruction ForEach-Object pour attribuer le domaine à chaque carte :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process { $_. SetDNSDomain("fabrikam.com") }
L'instruction de filtrage « IPEnabled=true » est nécessaire, car même sur un réseau qui utilise uniquement TCP/IP, plusieurs des configurations de carte réseau d'un ordinateur ne sont pas de véritables cartes TCP/IP ; elles sont en réalité des éléments logiciels qui prennent en charge RAS, PPTP, QoS et d'autres services pour toutes les cartes et n'ont donc pas d'adresse propre.
Vous pouvez filtrer la commande en utilisant l'applet de commande Where-Object, au lieu d'utiliser le filtre Get-WmiObject .
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.SetDNSDomain("fabrikam.com")}
Tâches de configuration DHCP
Modifier des informations DHCP implique l'utilisation d'un ensemble de cartes réseau, tout comme pour la configuration DNS. Les actions que vous pouvez exécuter au moyen de WMI sont nombreuses, aussi nous intéresserons-nous à certaines parmi les plus courantes.
Identification des cartes activées DHCP
Pour rechercher les cartes réseau activées DHCP sur un ordinateur, utilisez la commande suivante :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .
Pour exclure les cartes présentant des problèmes de configuration IP, vous pouvez récupérer uniquement les cartes activées IP :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .
Récupération des propriétés DHCP
Étant donné que les propriétés en relation avec DHCP pour une carte commencent généralement par « DHCP », vous pouvez utiliser le paramètre Property de Format-Table pour afficher uniquement ces propriétés :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Format-Table -Property DHCP*
Activation de DHCP sur chaque carte
Pour activer DHCP sur toutes les cartes, utilisez la commande suivante :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.EnableDHCP()}
Vous pouvez utiliser l'instruction Filter « IPEnabled=true and DHCPEnabled=false » pour éviter d'activer DHCP où il est déjà activé, mais omettre cette étape ne provoquera pas d'erreurs.
Libération et renouvellement des baux DHCP de certaines cartes
La classe Win32_NetworkAdapterConfiguration comprend les méthodes ReleaseDHCPLease et RenewDHCPLease. Toutes deux s'utilisent de la même façon. En règle générale, elles ne vous seront utiles que si vous devez libérer ou renouveler les adresses d'une carte sur un sous-réseau spécifique. Le moyen le plus simple de filtrer des cartes sur un sous-réseau consiste à choisir uniquement les configurations de cartes qui utilisent la passerelle de ce sous-réseau. Par exemple, la commande suivante libère tous les baux DHCP des cartes de l'ordinateur local qui obtiennent des baux DHCP de 192.168.1.254 :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
La seule modification requise pour renouveler un bail DHCP est d'utiliser la méthode RenewDHCPLease au lieu de la méthode ReleaseDHCPLease :
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
Remarque : | |
Lorsque vous utilisez ces méthodes sur un ordinateur distant, gardez à l'esprit que vous pouvez perdre l'accès au système distant si vous y êtes connecté via la carte dont le bail est libéré ou renouvelé. |
Libération et renouvellement des baux DHCP de toutes les cartes
Vous pouvez libérer ou renouveler globalement les adresses DHCP de toutes les cartes en utilisant les méthodes Win32_NetworkAdapterConfiguration, ReleaseDHCPLeaseAll et RenewDHCPLeaseAll. Toutefois, la commande doit s'appliquer à la classe WMI, plutôt qu'à une carte particulière, car la libération et le renouvellement globaux des baux s'effectuent sur la classe, et non sur une carte spécifique.
Vous pouvez obtenir une référence à une classe WMI au lieu des instances de classe en listant toutes les classes WMI, puis en sélectionnant uniquement la classe souhaitée par son nom. Par exemple, la commande suivante retourne la classe Win32_NetworkAdapterConfiguration :
Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}
Vous pouvez traiter l'intégralité de la commande en tant que classe, puis appeler dessus la méthode ReleaseDHCPAdapterLease. Dans la commande suivante, les parenthèses qui entourent les éléments de pipeline Get-WmiObject et Where-Object invitent Windows PowerShell à les évaluer en priorité :
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).ReleaseDHCPLeaseAll()
Vous pouvez utiliser le même format de commande pour appeler la méthode RenewDHCPLeaseAll :
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).RenewDHCPLeaseAll()
Création d'un partage réseau
Pour créer un partage réseau, utilisez la méthode Win32_Share Create :
(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).Create("C:\temp","TempShare",0,25,"test share of the temp folder")
Vous pouvez également créer le partage en utilisant net share dans Windows PowerShell :
net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"
Suppression d'un partage réseau
Vous pouvez supprimer un partage réseau avec Win32_Share, mais le processus diffère légèrement de la création d'un partage, car vous devez récupérer le partage spécifique à supprimer, plutôt que la classe Win32_Share. L'instruction suivante supprime le partage « TempShare » :
(Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").Delete()
Net share fonctionne également :
PS> net share tempshare /delete tempshare was deleted successfully.
Connexion d'un lecteur réseau accessible par Windows
Les applets de commande New-PSDrive créent un lecteur Windows PowerShell, mais les lecteurs ainsi créés sont disponibles uniquement pour Windows PowerShell. Pour créer un lecteur réseau, vous pouvez utiliser l'objet COM WScript.Network. La commande ci-dessous mappe le partage \\FPS01\users au lecteur local B:.
(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")
La commande net use fonctionne également :
net use B: \\FPS01\users
Les lecteurs mappés avec WScript.Network ou net use sont immédiatement disponibles pour Windows PowerShell.