WMI - Windows Management Instrumentation avec Tcl et tcom

 

Jack.R

Grâce à tcom, il est possible d'accéder à WMI et donc de transposer des scripts vbs.


Configuration réseau

Ici, on récupére la configuration des cartes réseaux à la façon de ipconfig

 #-------------------------------------------------------------------------------
 # Affiche les informations sur les interfaces réseau disponibles
 # grace à WMI - Windows Management Instrumentation
 # Utilisation de WMI en TCL: http://wiki.tcl.tk/11633
 #
 # Win32_NetworkAdapterConfiguration :
 #   http://msdn2.microsoft.com/en-us/library/aa394217.aspx
 # Exemple de script vbs :
 #   http://www.commentcamarche.net/forum/affich-1953934-script-et-adresse-ip#12
 #
 # Win32_NetworkAdapter :
 #   http://msdn2.microsoft.com/en-us/library/aa394216.aspx
 # Exemples de scripts vbs :
 #   http://msdn2.microsoft.com/en-us/library/aa394585.aspx
 #
 #-------------------------------------------------------------------------------

 package require tcom

 set ::frmString [ string repeat " ." 15 ]

 proc FrmTitre {titre} {
   return [ string replace $::frmString 0 \
       [expr {[ string length $titre ]-1}] $titre ]
 }

 set wbemFlagReturnImmediately [scan \x10 %c]
 set wbemFlagForwardOnly       [scan \x20 %c]

 set objWMIService [::tcom::ref getobject "winmgmts:{impersonationLevel=impersonate}!//"]
 set colItems \
 	[ $objWMIService ExecQuery \
 		  {SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE} \
 		  WQL [expr {$wbemFlagReturnImmediately + $wbemFlagForwardOnly}]]
 puts "Configuration réseau :"
 puts ""
 ::tcom::foreach objItem $colItems {
 	set propSet [ $objItem Properties_ ]

     puts "  Titre :"
     puts "   [ [ $propSet Item  Caption ] Value ]"
     puts "  [ FrmTitre "Description" ] : [ [ $propSet Item  Description ] Value ]"
   	puts "  [ FrmTitre "Identification" ] : [ [ $propSet Item SettingId ] Value ]"
     puts "  [ FrmTitre "Adresse MAC" ] : [ [ $propSet Item  MACAddress ] Value ]"
     puts "  [ FrmTitre "Nom d'hôte" ] : [ [ $propSet Item  DNSHostName ] Value ]"
     puts "  [ FrmTitre "Adresse IP" ] : [ [ $propSet Item  IPAddress[] ] Value ]"
     puts "  [ FrmTitre "Masque de sous-réseau" ] : [ [ $propSet Item  IPSubnet[] ] Value ]"
     set data [ [ $propSet Item  DNSDomain ] Value ]
     if { $data != "::tcom::NULL" } { puts "  [ FrmTitre "Domaine DNS" ] : $data" }
     set data [ [ $propSet Item  DNSDomainSuffixSearchOrder[] ] Value ]
     if { $data != "::tcom::NULL" } { puts "  [ FrmTitre "Suffixe DNS" ] : $data" }
     puts "  [ FrmTitre "Ordre de recherche DNS" ] : [ [ $propSet Item  DNSServerSearchOrder[] ] Value ]"
     puts "  [ FrmTitre "Nom du service" ] : [ [ $propSet Item  ServiceName ] Value ]"

     if { [ [ $propSet Item DHCPEnabled ] Value ] } {
 		puts "  [ FrmTitre "DHCP" ] : oui"
 		puts "  [ FrmTitre "Serveur DHCP" ] : [ [ $propSet Item  DHCPServer ] Value ]"
     } else {
 		puts "  [ FrmTitre "DHCP" ] : non"
     }

     if { [ [ $propSet Item DNSEnabledForWINSResolution ] Value ] } {
 		puts "  [ FrmTitre "Résolution WINS" ] : oui"
     } else {
 		puts "  [ FrmTitre "Résolution WINS" ] : non"
     }
     puts "  [ FrmTitre "Serveur primaire WINS" ] : [ [ $propSet Item  WINSPrimaryServer ] Value ]"
     puts "  [ FrmTitre "Serveur secondaire WINS" ] : [ [ $propSet Item  WINSSecondaryServer ] Value ]"

     puts ""
 }