Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
disk info
Auteur Message
Répondre en citant
Message disk info 
Salut,

Parfois, dans des scripts, on a besoin d'infos sur des partitions, des volumes,
des disques avant de pouvoir faire des actions en rapport avec ces systèmes.

Du coup, j'ai voulu faire un script qui relève d'un coup toutes les infos utiles
concernant les disques durs. J'étais parti sur wmic d'abord, mais un script wmi
(en vbs) sera je pense plus intéressant et plus flexible.

La présentation des données devra être dans un format qui puisse être
exploitable par d'autres scripts.

Soit sous un format Shell on va dire :

disk[0].model....

ou json

disk{0{model=}}...

voilà un exemple : disk_data.vbs (se lance dans la console avec cscript //nologo disk_data.vbs)

Mais tout est à définir... de sorte que ça puisse répondre à toute sorte de besoins...
Merci aux futurs contributeurs...


Code:
'Option Explicit
'On Error Resume Next
'SWbemServices.ExecQuery options list
Const wbem_flag_return_immediately= &h10
Const wbem_flag_forwardonly= &h20
wbem_execquery_option= wbem_flag_return_immediately + wbem_flag_forwardonly
WScript.Echo "disk_info.Version=0.1.1-b"
WScript.Echo ""
WScript.Quit(print_disk_data())


function print_partition_disk_data(ByVal disk_Index, ByVal disk_DeviceID)
  Set disk_partition_list= CreateObject("System.Collections.ArrayList")
  Set SWbemServices= GetObject("winmgmts:\\.\root\CIMV2")
  Set partitionItems= SWbemServices.ExecQuery( _
    "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & _
    Replace(disk_DeviceID, "\", "\\", 1, -1, vbTextCompare) & """} WHERE " & _
    "AssocClass = Win32_DiskDriveToDiskPartition", "WQL", wbem_execquery_option)     
    For Each objItem In partitionItems
      'wscript.echo objItem.DeviceID
      token_pos= InstrRev(objItem.DeviceID, "#")
      If token_pos > 0 Then
        disk_partition_list.Add Right(objItem.DeviceID, Len(objItem.DeviceID)-token_pos)
        WScript.Echo "disk["& disk_Index& "].Partition["& Right(objItem.DeviceID, Len(objItem.DeviceID)-token_pos)&"].DeviceID="& objItem.DeviceID
        'wscript.echo Right(objItem.DeviceID, Len(objItem.DeviceID)-token_pos)
      End If       
    Next
  WScript.Echo "disk["& disk_Index& "].Partition.List="& join(disk_partition_list.ToArray(), ",")
  WScript.Echo "disk["& disk_Index& "].Partition.Count="& disk_partition_list.Count
  print_partition_disk_data= 0
End Function


function print_disk_data()
  Set disk_list= CreateObject("System.Collections.ArrayList")
  Set SWbemServices= GetObject("winmgmts:\\.\root\CIMV2")
  Set diskItems = _
    SWbemServices.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", wbem_execquery_option)
    For Each objItem In diskItems
      disk_list.Add objItem.Index
      WScript.Echo "disk["& objItem.Index& "].Index="& objItem.Index
      WScript.Echo "disk["& objItem.Index& "].Model="& objItem.Model
      WScript.Echo "disk["& objItem.Index& "].PNPDeviceID="& objItem.PNPDeviceID
      WScript.Echo "disk["& objItem.Index& "].DeviceID="& objItem.DeviceID
      WScript.Echo "disk["& objItem.Index& "].InterfaceType="& objItem.InterfaceType
      WScript.Echo "disk["& objItem.Index& "].SubPartition.Count="& objItem.Partitions
      WScript.Echo "disk["& objItem.Index& "].Partitions="& objItem.Partitions
      WScript.Echo "disk["& objItem.Index& "].Size="& objItem.Size
      call print_partition_disk_data(objItem.Index, objItem.DeviceID)
      WScript.Echo
    Next
  WScript.Echo "disk.List="& join(disk_list.ToArray(), ",")
  disk_list.Sort()
  WScript.Echo "disk.SortedList="& join(disk_list.ToArray(), ",")
  WScript.Echo "disk.Count="& disk_list.Count
  print_disk_data= 0
end function




Dernière édition par jay le Mar 26 Sep 2017 - 18:59; édité 5 fois
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message disk info 
J’éditerais le message au fur et à mesure des propositions.



Répondre en citant
Message disk info 
Mise à jour du code pour le relevé des infos sur les partitions.
Après faudra attaquer les volumes.



Répondre en citant
Message disk info 
Salut,

Pour les lecteurs, c'est bon, mais j'ai voulu aussi ajouter les chemins
et les index de volumes (\device\harddiskvolumeX), mais c'est pas
possible de les récupérer avec wmi. Il faut passer par l'api Windows.

Donc, je vais m'arrêter en ce qui concerne le script de cette discussion
(ou plutôt de ce monologue Laughing).



Message disk info 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch