Maper des lecteurs en fonction du réseau (améliorations)

Bon, j’ai fini par tombé dans une des limitations de mon script, j’en ai donc profité pour le modifier, afin qu’il prenne en compte toutes les adresses IP des interfaces réseaux actives.


Il a donc fallu répertorier ces interfaces. La commande suivante permet de le faire.

get-wmiobject -class « Win32_NetworkAdapterConfiguration »Filter IPEnabled=True

On cherche un objet WMI ayant comme classe Win32_NetworkAdapterConfiguration. Celle ci va nous donner les détails de la configuration de toutes les interfaces (@IP, @MAC, passerelle …).

Étant donnée que nous ne voulons que les interfaces réseaux actives, on rajoute un filtre, grâce à l’option -Filter.

La sortie de cette commande ressemble à ceci:

DHCPEnabled      : True
IPAddress        : {192.168.1.2}
DefaultIPGateway : {192.168.1.15}
DNSDomain        : test.eu.local
ServiceName      : b57w2k
Description      : Broadcom NetXtreme Gigabit Ethernet
Index            : 9

DHCPEnabled      : True
IPAddress        : {192.168.1.4}
DefaultIPGateway : {192.168.1.15}
DNSDomain        : test.eu.local
ServiceName      : w29n51
Description      : Intel(R) PRO/Wireless 2200BG Network Connection
Index            : 11

DHCPEnabled      : False
IPAddress        : {192.168.174.1}
DefaultIPGateway :
DNSDomain        :
ServiceName      : VMnetAdapter
Description      : VMware Virtual Ethernet Adapter for VMnet1
Index            : 26

DHCPEnabled      : False
IPAddress        : {192.168.80.1}
DefaultIPGateway :
DNSDomain        :
ServiceName      : VMnetAdapter
Description      : VMware Virtual Ethernet Adapter for VMnet8
Index            : 27

Nous avons bien toutes les interfaces réseaux actives, avec les informations associées, dont celle qui nous intéresse: l’adresse IP.

Il faut maintenant créer une boucle, afin de récupérer chaque adresse IP, et tester si l’une correspond à l’un de nos réseaux. J’ai choisi la boucle Foreach, qui m’a paru la plus appropriée à ce type d’opération. Pour ne récupérer que l’adresse IP, nous allons utiliser la méthode IPAddress.

foreach ($objItem in $colItem) {
$ip = $objItem.IPAddress

}

Si j’avais mis un echo $ip dans la boucle, la sortie aurait été:

192.168.1.2
192.168.1.4
192.168.174.1
192.168.80.1

Il ne reste plus qu’à mettre les conditions définies dans le premier script à l’intérieur de la boucle.

Le script complet:

$colItem = get-wmiobject -class "Win32_NetworkAdapterConfiguration" -Filter IPEnabled=True
foreach ($objItem in $colItem)
{
  $ip = $objItem.IPAddress
 
  if ($ip -cmatch "192.168.0.")
  {
    (New-Object -ComObject WScript.Network).MapNetworkDrive("X:","\\192.168.0.1\partage1")
     exit 0
  }
 
  elseif ($ip -cmatch "192.168.1.")
  {
    (New-Object -ComObject WScript.Network).MapNetworkDrive("X:","\\192.168.1.100\partage2")
    (New-Object -ComObject WScript.Network).MapNetworkDrive("Z:","\\192.168.1.100\partage3")
    exit 0
  }
 
  elseif ($ip -cmatch "172.16.0.")
  {
    $user=le_seb
    $pass=*********
    (New-Object -ComObject WScript.Network).MapNetworkDrive("X:","\\172.16.0.253\partage2","false","$user","$pass")
    exit 0
  }
}

Pour exécuter ce script, la méthode ce trouve dans ce post.