Exécution de tâches de mise en réseau

Cet exemple s’applique uniquement aux plateformes Windows.

TCP/IP étant le protocole réseau le plus utilisé, la plupart des tâches d’administration de protocole réseau de bas niveau impliquent TCP/IP. Dans cette section, nous utilisons PowerShell et WMI pour effectuer ces tâches.

Affichage de la liste des adresses IP pour un ordinateur

Pour obtenir toutes les adresses IP utilisées sur l’ordinateur local, entrez la commande suivante :

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

Comme la propriété IPAddress d’un objet Win32_NetworkAdapterConfiguration est un tableau, vous devez utiliser le paramètre ExpandProperty de Select-Object pour voir la liste complète des adresses.

10.0.0.1
fe80::60ea:29a7:a233:7cb7
2601:600:a27f:a470:f532:6451:5630:ec8b
2601:600:a27f:a470:e167:477d:6c5c:342d
2601:600:a27f:a470:b021:7f0d:eab9:6299
2601:600:a27f:a470:a40e:ebce:1a8c:a2f3
2601:600:a27f:a470:613c:12a2:e0e0:bd89
2601:600:a27f:a470:444f:17ec:b463:7edd
2601:600:a27f:a470:10fd:7063:28e9:c9f3
2601:600:a27f:a470:60ea:29a7:a233:7cb7
2601:600:a27f:a470::2ec1

En utilisant l’applet de commande Get-Member, vous pouvez voir que la propriété IPAddress est un tableau :

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Get-Member -Name IPAddress
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_NetworkAdapterConfiguration

Name      MemberType Definition
----      ---------- ----------
IPAddress Property   string[] IPAddress {get;}

La propriété IPAddress pour chaque carte réseau est en réalité un tableau. Les accolades dans la définition indiquent qu’IPAddress n’est pas une valeur System.String, mais un tableau de valeurs System.String.

Affichage de la liste des données de configuration IP

Pour afficher les données de configuration IP détaillées de chaque carte réseau, utilisez la commande suivante :

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true

L’affichage par défaut pour l’objet Configuration de la carte réseau est un jeu très réduit des informations disponibles. Pour une inspection et un dépannage approfondis, utilisez Select-Object ou une cmdlet de mise en forme, telle que Format-List, pour spécifier les propriétés à afficher.

Dans les réseaux TCP/IP modernes, vous n’êtes probablement pas intéressé par les propriétés IPX ou WINS. Vous pouvez utiliser le paramètre ExcludeProperty de Select-Object pour masquer les propriétés dont les noms commencent par « WINS » ou « IPX ».

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -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 secondaires.

Test ping des ordinateurs

Vous pouvez effectuer un simple test ping sur un ordinateur à l’aide de la méthode Win32_PingStatus. La commande suivante exécute le test ping, mais retourne un résultat assez long :

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"

Une forme plus utile pour les informations résumées est l’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 de la tablea fin qu’elles s’affichent correctement dans PowerShell.

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'" |
    Format-Table -Property Address,ResponseTime,StatusCode -Autosize
Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0

Un StatusCode de 0 indique un test ping réussi.

Vous pouvez utiliser un tableau pour effectuer un test ping de plusieurs ordinateurs avec une seule commande. Étant donné qu’il y a plusieurs adresses, utilisez la méthode ForEach-Object pour effectuer un test ping de chaque adresse séparément :

'127.0.0.1','localhost','bing.com' |
  ForEach-Object -Process {
    Get-CimInstance -Class Win32_PingStatus -Filter ("Address='$_'") |
      Select-Object -Property Address,ResponseTime,StatusCode
  }

Vous pouvez utiliser le même format de commande pour effectuer un test ping de toutes les adresses d’un sous-réseau, comme un réseau privé utilisant 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 dans la plage de 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 nombres de 1 à 254 dans PowerShell, utilisez l’expression 1..254. Vous pouvez effectuer un test ping sur un sous-réseau complet en ajoutant les valeurs de la plage à une adresse partielle dans l’instruction ping :

1..254| ForEach-Object -Process {
  Get-CimInstance -Class Win32_PingStatus -Filter ("Address='192.168.1.$_'") } |
    Select-Object -Property Address,ResponseTime,StatusCode

Notez que cette technique pour la génération d’une plage d’adresses est également utilisable ailleurs. Vous pouvez générer un jeu complet d’adresses comme suit :

$ips = 1..254 | ForEach-Object -Process {'192.168.1.' + $_}

Récupération des propriétés d’une carte réseau

Nous avons mentionné ci-dessus, qu’il est possible de récupérer des propriétés de configuration générale à l’aide de la classe Win32_NetworkAdapterConfiguration. Bien qu’il ne s’agisse pas strictement d’informations TCP/IP, les informations de carte réseau telles que les adresses MAC et les types de cartes peuvent être utiles pour comprendre ce qui se passe sur un ordinateur. Pour obtenir un résumé de ces informations, utilisez la commande suivante :

Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .

Attribution de domaine DNS pour une carte réseau

Pour attribuer le domaine DNS pour une résolution de noms automatique, utilisez la méthode SetDNSDomain de Win32_NetworkAdapterConfiguration. Le paramètre Query de Invoke-CimMethod prend une chaîne de requête WQL. L’applet de commande appelle la méthode spécifiée sur chaque instance retournée par la requête.

$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql

Le filtrage sur IPEnabled=True est nécessaire, car même pour un réseau qui utilise uniquement TCP/IP, plusieurs des configurations de carte réseau sur un ordinateur ne sont pas de véritables adaptateurs TCP/IP. Il s’agit d’éléments logiciels généraux prenant en charge RAS, VPN, QoS et d’autres services pour tous les adaptateurs et qui, par conséquent, n’ont pas d’adresse propre.

Exécution de tâches de configuration DHCP

La modification des détails DHCP implique l’utilisation d’un ensemble de cartes réseau, tout comme la configuration DNS. Vous pouvez effectuer plusieurs actions distinctes à l’aide de WMI.

Trouver des cartes avec DHCP activé

Pour rechercher les cartes avec DHCP activé sur un ordinateur, utilisez la commande suivante :

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"

Pour exclure les cartes présentant des problèmes de configuration IP, vous pouvez récupérer uniquement les cartes avec IP activé :

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"

Récupération des propriétés DHCP

Étant donné que les propriétés DHCP d’un adaptateur commencent généralement par DHCP, vous pouvez utiliser le paramètre Propriété de Format-Table pour afficher uniquement ces propriétés :

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter  "IPEnabled=$true and DHCPEnabled=$true" |
  Format-Table -Property DHCP*

Activation du protocole DHCP sur chaque carte

Pour activer le protocole DHCP sur toutes les cartes, utilisez la commande suivante :

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

L’utilisation de l’instruction de filtre IPEnabled=True and DHCPEnabled=False évite d’activer le protocole DHCP s’il est déjà activé.

Résiliation et renouvellement de baux DHCP sur des cartes spécifiques

Les instances de la classe Win32_NetworkAdapterConfiguration ont les méthodes ReleaseDHCPLease et RenewDHCPLease. Toutes deux sont utilisées de la même façon. En règle générale, utilisez ces méthodes si vous devez uniquement résilier ou renouveler des adresses pour une carte sur un sous-réseau spécifique. La manière la plus simple de filtrer des cartes sur un sous-réseau consiste à choisir uniquement les configurations de carte qui utilisent la passerelle pour ce sous-réseau. Par exemple, la commande suivante libère tous les baux DHCP sur les cartes de l’ordinateur local qui obtiennent des baux DHCP à partir de 192.168.1.254 :

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

Le seul changement pour renouveler un bail DHCP est l’utilisation de la méthode RenewDHCPLease au lieu de la méthode ReleaseDHCPLease :

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql

Notes

Lorsque vous utilisez ces méthodes sur un ordinateur distant, n’oubliez pas que vous risquez de perdre l’accès au système distant si vous êtes connecté à celui-ci via la carte dont le bail a été résilié ou renouvelé.

Résiliation et renouvellement de baux DHCP sur toutes les cartes

Vous pouvez effectuer des résiliations ou renouvellements globaux d’adresse DHCP sur tous les adaptateurs 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 résiliation et le renouvellement de baux de façon globale sont effectuées sur la classe, et non sur une carte spécifique. L’applet de commande Invoke-CimMethod peut appeler les méthodes d’une classe.

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

Vous pouvez utiliser le même format de commande pour appeler la méthode RenewDHCPLeaseAll:

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

Création d’un partage réseau

Pour créer un partage réseau, utilisez la méthode Create de Win32_Share :

Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments @{
    Path = 'C:\temp'
    Name = 'TempShare'
    Type = [uint32]0 #Disk Drive
    MaximumAllowed = [uint32]25
    Description = 'test share of the temp folder'
}

Elle équivaut à la commande net share suivante sur Windows :

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

Pour appeler une méthode d’une classe WMI qui prend des paramètres, vous devez connaître les paramètres disponibles et les types de ces paramètres. Par exemple, vous pouvez lister les méthodes de Win32_Class avec les commandes suivantes :

(Get-CimClass -ClassName Win32_Share).CimClassMethods
Name          ReturnType Parameters                                   Qualifiers
----          ---------- ----------                                   ----------
Create            UInt32 {Access, Description, MaximumAllowed, Name…} {Constructor, Implemented, MappingStrings, Stati…
SetShareInfo      UInt32 {Access, Description, MaximumAllowed}        {Implemented, MappingStrings}
GetAccessMask     UInt32 {}                                           {Implemented, MappingStrings}
Delete            UInt32 {}                                           {Destructor, Implemented, MappingStrings}

Utilisez la commande suivante pour lister les paramètres de la méthode Create.

(Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters
Name            CimType Qualifiers                                  ReferenceClassName
----            ------- ----------                                  ------------------
Access         Instance {EmbeddedInstance, ID, In, MappingStrings…}
Description      String {ID, In, MappingStrings, Optional}
MaximumAllowed   UInt32 {ID, In, MappingStrings, Optional}
Name             String {ID, In, MappingStrings}
Password         String {ID, In, MappingStrings, Optional}
Path             String {ID, In, MappingStrings}
Type             UInt32 {ID, In, MappingStrings}

Vous pouvez également lire la documentation de la méthode Create de la classe Win32_Share.

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 l’instance spécifique à supprimer au lieu de la classe Win32_Share. L’exemple suivant supprime le partage TempShare :

$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql

Connexion d’un lecteur réseau accessible à Windows

L’applet de commande New-PSDrive peut créer un lecteur PowerShell mappé à un partage réseau.

New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

Toutefois, les lecteurs créés de cette façon sont uniquement disponibles pour la session PowerShell dans laquelle ils sont créés. Pour mapper un lecteur disponible en dehors de PowerShell (ou dans d’autres sessions PowerShell), vous devez utiliser le paramètre Persist.

New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

Notes

Les lecteurs mappés de manière permanente peuvent ne pas être disponibles quand ils sont exécutés dans un contexte avec élévation de privilèges. Il s’agit du comportement par défaut de Windows UAC. Pour plus d’informations, consultez l’article suivant :