Question Hashtable dans un hashtable possible?
- Tarik
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
il y a 15 ans 5 mois #2873
par Tarik
Hashtable dans un hashtable possible? a été créé par Tarik
Bonjour à tous,
Est il possible de placer un hashtable dans un hashtable et d'y acceder par la suite??
[code:1]function ReadFileSystem()
{
$AllDiskDrive = GWMI -CL Win32_DiskDrive
$diskID = 0
[hashtable]$Devices =@{}
Write-host \"Disk number: \"$AllDiskDrive.Count
foreach($diskDrive in $AllDiskDrive){
$strDriveDeviceID = [string]$diskDrive.deviceid
$Devices.\"$diskID\" = @{DeviceID=\"\";ID=\"\";Status=\"\";Partition=\"\";type=\"\";LogicalDisks=\"\"}
$Devices.\"$diskID\".Set_item(\"ID\",$diskID)
$Devices.\"$diskID\".Set_item(\"DeviceID\",$strDriveDeviceID)
$Devices.\"$diskID\".Set_item(\"Status\",\"NONE\"«»)
$Devices.\"$diskID\".Set_item(\"TotalSize\",[string]$diskDrive.Size /1GB«»)
$query1 = \"Associators of {Win32_DiskDrive.DeviceID='$strDriveDeviceID'} where AssocClass=Win32_DiskDriveToDiskPartition\"
$colPartitions = get-wmiobject -query $query1
if($colPartitions -eq $NULL){
Write-host -f red \"No partitions\"
$Devices.\"$diskID\".Set_item(\"Partition\",\"0\"«»)
}else{
if($colPartitions.Count -eq 1){
$Devices.\"$diskID\".Set_item(\"Partition\",\"1\"«»)
}else{
$Devices.\"$diskID\".Set_item(\"Partition\",$colPartitions.Count)
}
foreach($colPart in $colPartitions) {
$strPartitionDeviceID = [string]$colPart.DeviceID
$query2 = \"Associators of {Win32_DiskPartition.DeviceID='$strPartitionDeviceID'} where AssocClass=Win32_LogicalDiskToPartition\"
$colLogicalDisks = Get-WmiObject -query $query2
if($colLogicalDisks){
[hashtable]$LogicalDisks = @{}
$i = 0
foreach($colLogicalDisk in $colLogicalDisks){
$LogicalDisks.\"$i\" = @{Type=\"\";Size=\"\";FreeSpace=\"\";DriveType=\"\";MediaType=\"\";VolumeName=\"\";DeviceID=\"\";}
Write-host \"Disk Size: \"($diskDrive.Size /1GB«»)
Write-host \"SCSILogicalUnit: \"$diskDrive.SCSILogicalUnit
Write-host \"SCSITargetId: \"$diskDrive.SCSITargetId
Write-host \"Partitions: \"$diskDrive.Partitions
Write-host \"DiskID: \"$diskID \" has \"$diskDrive.Partitions \" partition(s)\"
Write-host \"Physical Disk:\" $diskDrive.caption \" -- \" $diskDrive.deviceid
Write-host \"Disk Partition: \" $colPart.DeviceID
Write-host \"DriveType: \"$colLogicalDisk.DriveType
Write-host \"MediaType: \"$colLogicalDisk.MediaType
Write-host \"VolumeName: \"$colLogicalDisk.VolumeName
Write-host \"Logical Disk: \" $colLogicalDisk.deviceid
Write-host \"FreeSpace: \" ($colLogicalDisk.FreeSpace /1GB«»)
Write-host \"Logical Size:\" ($colLogicalDisk.Size /1GB«»)
Write-host
[string]$var = $colLogicalDisk.Size /1GB
$LogicalDisks.\"$i\".Set_item(\"Size\",[string]$var)
$LogicalDisks.\"$i\".Set_item(\"FreeSpace\",[string]$colLogicalDisk.FreeSpace)
$LogicalDisks.\"$i\".Set_item(\"DriveType\",[string]$colLogicalDisk.DriveType)
$LogicalDisks.\"$i\".Set_item(\"MediaType\",[string]$colLogicalDisk.MediaType)
$LogicalDisks.\"$i\".Set_item(\"VolumeName\",[string]$colLogicalDisk.VolumeName)
$LogicalDisks.\"$i\".Set_item(\"DeviceID\",[string]$colLogicalDisk.deviceid)
$type = FindLogicalDiskType $colLogicalDisk.deviceid $colLogicalDisk.DriveType $colLogicalDisk.Size
$LogicalDisks.\"$i\".Set_item(\"Type\",[string]$type)
$i++
}
$Devices.\"$diskID\".Set_item(\"LogicalDisks\",$LogicalDisks)
}else{
Write-host \"There is no Logical Disk on \" $colPart.DeviceID
$type = FindDriveType $diskDrive.Size
$Devices.\"$diskID\".Set_item(\"Type\",[string]$type)
}
}
}
$diskID++
}
CreateSanDiskConfigFile $diskID $Devices
} [/code:1]
Ce code permet de lister les disques dur et leur partition si il y en a.
Le code place les logicalDisk(hashtable) dans un autre hashtable (Devices)
Le probleme est qu'ensuite je n'arrive pas à récupérer les données provenant des logicalDisk..
J'aimerais savoir si mon procédé est correct?
Ou Quelqu'un a t'il des suggestions?
Bien à vous tous,
Tarik<br><br>Message édité par: Tartar, à: 1/10/08 14:45
Est il possible de placer un hashtable dans un hashtable et d'y acceder par la suite??
[code:1]function ReadFileSystem()
{
$AllDiskDrive = GWMI -CL Win32_DiskDrive
$diskID = 0
[hashtable]$Devices =@{}
Write-host \"Disk number: \"$AllDiskDrive.Count
foreach($diskDrive in $AllDiskDrive){
$strDriveDeviceID = [string]$diskDrive.deviceid
$Devices.\"$diskID\" = @{DeviceID=\"\";ID=\"\";Status=\"\";Partition=\"\";type=\"\";LogicalDisks=\"\"}
$Devices.\"$diskID\".Set_item(\"ID\",$diskID)
$Devices.\"$diskID\".Set_item(\"DeviceID\",$strDriveDeviceID)
$Devices.\"$diskID\".Set_item(\"Status\",\"NONE\"«»)
$Devices.\"$diskID\".Set_item(\"TotalSize\",[string]$diskDrive.Size /1GB«»)
$query1 = \"Associators of {Win32_DiskDrive.DeviceID='$strDriveDeviceID'} where AssocClass=Win32_DiskDriveToDiskPartition\"
$colPartitions = get-wmiobject -query $query1
if($colPartitions -eq $NULL){
Write-host -f red \"No partitions\"
$Devices.\"$diskID\".Set_item(\"Partition\",\"0\"«»)
}else{
if($colPartitions.Count -eq 1){
$Devices.\"$diskID\".Set_item(\"Partition\",\"1\"«»)
}else{
$Devices.\"$diskID\".Set_item(\"Partition\",$colPartitions.Count)
}
foreach($colPart in $colPartitions) {
$strPartitionDeviceID = [string]$colPart.DeviceID
$query2 = \"Associators of {Win32_DiskPartition.DeviceID='$strPartitionDeviceID'} where AssocClass=Win32_LogicalDiskToPartition\"
$colLogicalDisks = Get-WmiObject -query $query2
if($colLogicalDisks){
[hashtable]$LogicalDisks = @{}
$i = 0
foreach($colLogicalDisk in $colLogicalDisks){
$LogicalDisks.\"$i\" = @{Type=\"\";Size=\"\";FreeSpace=\"\";DriveType=\"\";MediaType=\"\";VolumeName=\"\";DeviceID=\"\";}
Write-host \"Disk Size: \"($diskDrive.Size /1GB«»)
Write-host \"SCSILogicalUnit: \"$diskDrive.SCSILogicalUnit
Write-host \"SCSITargetId: \"$diskDrive.SCSITargetId
Write-host \"Partitions: \"$diskDrive.Partitions
Write-host \"DiskID: \"$diskID \" has \"$diskDrive.Partitions \" partition(s)\"
Write-host \"Physical Disk:\" $diskDrive.caption \" -- \" $diskDrive.deviceid
Write-host \"Disk Partition: \" $colPart.DeviceID
Write-host \"DriveType: \"$colLogicalDisk.DriveType
Write-host \"MediaType: \"$colLogicalDisk.MediaType
Write-host \"VolumeName: \"$colLogicalDisk.VolumeName
Write-host \"Logical Disk: \" $colLogicalDisk.deviceid
Write-host \"FreeSpace: \" ($colLogicalDisk.FreeSpace /1GB«»)
Write-host \"Logical Size:\" ($colLogicalDisk.Size /1GB«»)
Write-host
[string]$var = $colLogicalDisk.Size /1GB
$LogicalDisks.\"$i\".Set_item(\"Size\",[string]$var)
$LogicalDisks.\"$i\".Set_item(\"FreeSpace\",[string]$colLogicalDisk.FreeSpace)
$LogicalDisks.\"$i\".Set_item(\"DriveType\",[string]$colLogicalDisk.DriveType)
$LogicalDisks.\"$i\".Set_item(\"MediaType\",[string]$colLogicalDisk.MediaType)
$LogicalDisks.\"$i\".Set_item(\"VolumeName\",[string]$colLogicalDisk.VolumeName)
$LogicalDisks.\"$i\".Set_item(\"DeviceID\",[string]$colLogicalDisk.deviceid)
$type = FindLogicalDiskType $colLogicalDisk.deviceid $colLogicalDisk.DriveType $colLogicalDisk.Size
$LogicalDisks.\"$i\".Set_item(\"Type\",[string]$type)
$i++
}
$Devices.\"$diskID\".Set_item(\"LogicalDisks\",$LogicalDisks)
}else{
Write-host \"There is no Logical Disk on \" $colPart.DeviceID
$type = FindDriveType $diskDrive.Size
$Devices.\"$diskID\".Set_item(\"Type\",[string]$type)
}
}
}
$diskID++
}
CreateSanDiskConfigFile $diskID $Devices
} [/code:1]
Ce code permet de lister les disques dur et leur partition si il y en a.
Le code place les logicalDisk(hashtable) dans un autre hashtable (Devices)
Le probleme est qu'ensuite je n'arrive pas à récupérer les données provenant des logicalDisk..
J'aimerais savoir si mon procédé est correct?
Ou Quelqu'un a t'il des suggestions?
Bien à vous tous,
Tarik<br><br>Message édité par: Tartar, à: 1/10/08 14:45
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6300
- Remerciements reçus 68
il y a 15 ans 5 mois #2879
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Hashtable dans un hashtable possible?
Salut,
Tartar écrit:
Il y a un pb de copier coller du à \"une collision de nom de variable\" il me semble :
[code:1]
$type = FindLogicalDiskType $colLogicalDisks.\"$i\".deviceid $colLogicalDisks.\"$i\".DriveType $colLogicalDisks.\"$i\".Size
[/code:1]
$colLogicalDisks avec un S
Sinon les lignes du type suivante peuvent être simplifiées :
[code:1]
$Devices.\"$diskID\".Set_item(\"ID\",$diskID)
[/code:1]
en
[code:1]
$Devices.\"$diskID\".ID=$diskID
[/code:1]
Et pour l'affichage
[code:1]
Echo $Devices.\"$diskID\".totalsize
#par contre au sein d'une string
Echo \"Taille= $($Devices.\"$diskID\".totalsize)\"
[/code:1]
ç'est bien utile cette construction, n'est-ce pas ?
En Pascal il existe le type record, similaire une struct du C# :
[code:1]
type
TCorrespondanceCsv= Record
NomCsv : ShortString;
NomSql : ShortString;
NumeroColonne : Byte;
End;
var
Correspondance: TCorrespondanceCsv
begin
Correspondance.NomCsv=\"Test\";
[/code:1]
Dommage qu'il ne soit pas possible de créer ce type de structure sans passer par une hastable, au niveau performance je ne suis pas sûr que cela soit efficace. Mais c'est un compromis.
Tartar écrit:
Oui.J'aimerais savoir si mon procédé est correct?
Il y a un pb de copier coller du à \"une collision de nom de variable\" il me semble :
[code:1]
$type = FindLogicalDiskType $colLogicalDisks.\"$i\".deviceid $colLogicalDisks.\"$i\".DriveType $colLogicalDisks.\"$i\".Size
[/code:1]
$colLogicalDisks avec un S
Sinon les lignes du type suivante peuvent être simplifiées :
[code:1]
$Devices.\"$diskID\".Set_item(\"ID\",$diskID)
[/code:1]
en
[code:1]
$Devices.\"$diskID\".ID=$diskID
[/code:1]
Et pour l'affichage
[code:1]
Echo $Devices.\"$diskID\".totalsize
#par contre au sein d'une string
Echo \"Taille= $($Devices.\"$diskID\".totalsize)\"
[/code:1]
ç'est bien utile cette construction, n'est-ce pas ?
En Pascal il existe le type record, similaire une struct du C# :
[code:1]
type
TCorrespondanceCsv= Record
NomCsv : ShortString;
NomSql : ShortString;
NumeroColonne : Byte;
End;
var
Correspondance: TCorrespondanceCsv
begin
Correspondance.NomCsv=\"Test\";
[/code:1]
Dommage qu'il ne soit pas possible de créer ce type de structure sans passer par une hastable, au niveau performance je ne suis pas sûr que cela soit efficace. Mais c'est un compromis.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Tarik
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
il y a 15 ans 5 mois #2890
par Tarik
Réponse de Tarik sur le sujet Re:Hashtable dans un hashtable possible?
Merci pour ces conseils
Bon je n'ai pas réussi à placer un hashtable dans un hashtable donc j'ai contourné le problème en mettant les infos dans un array.
ci dessous le code:
[code:1]function GetDevices{
$AllDiskDrive = GWMI -CL Win32_DiskDrive
$diskID = 0
[hashtable]$Devices =@{}
Write-host \"Disk number: \"$AllDiskDrive.Count
## Check all Disk Drive
foreach($diskDrive in $AllDiskDrive){
$strDriveDeviceID = [string]$diskDrive.deviceid
$Devices.\"$diskID\" = @{DeviceID=\"\";ID=\"\";Status=\"\";TotalSize=\"\";Partition=\"\";Type=\"\";LogicalDisks=\"\"}
$Devices.\"$diskID\".Set_item(\"ID\",$diskID)
$Devices.\"$diskID\".Set_item(\"DeviceID\",$strDriveDeviceID)
$Devices.\"$diskID\".Set_item(\"TotalSize\",[string]$diskDrive.Size /1GB«»)
## Check all Partitions on the Disk
$query1 = \"Associators of {Win32_DiskDrive.DeviceID='$strDriveDeviceID'} where AssocClass=Win32_DiskDriveToDiskPartition\"
$colPartitions = get-wmiobject -query $query1
if($colPartitions -eq $NULL){
Write-host -f red \"No partitions\"
$Devices.\"$diskID\".Set_item(\"Partition\",\"0\"«»)
$type = FindDriveType ($diskDrive.Size /1GB«»)
$Devices.\"$diskID\".Set_item(\"Type\",[string]$type)
$Devices.\"$diskID\".Set_item(\"Status\",\"READY\"«»)
}else{
$Devices.\"$diskID\".Set_item(\"Status\",\"LOCKED\"«»)
if($colPartitions.Count -ge 2){
$Devices.\"$diskID\".Set_item(\"Partition\",$colPartitions.Count)
}else{
$Devices.\"$diskID\".Set_item(\"Partition\",\"1\"«»)
}
## Check All Logical Disk of partitionss
$ArrLogicalDisks = GetLogicalDisk($colPartitions)
$Devices.\"$diskID\".Set_item(\"LogicalDisks\",$ArrLogicalDisks)
}
$diskID++
}
$ArrDevices = $diskID,$Devices
return $ArrDevices
} [/code:1]
[code:1] function GetLogicalDisk($colPartitions){
[array]$ArrLDisk = $NULL
foreach($colPart in $colPartitions) {
$strPartitionDeviceID = [string]$colPart.DeviceID
$query2 = \"Associators of {Win32_DiskPartition.DeviceID='$strPartitionDeviceID'} where AssocClass=Win32_LogicalDiskToPartition\"
$colLogicalDisks = Get-WmiObject -query $query2
if($colLogicalDisks){
[hashtable]$LogicalDisks = @{}
$i = 0
foreach($colLogicalDisk in $colLogicalDisks){
$LogicalDisks = @{Type=\"\";Size=\"\";FreeSpace=\"\";DriveType=\"\";MediaType=\"\";Caption=\"\";Description=\"\";VolumeName=\"\";DeviceID=\"\";SystemName=\"\";ProviderName=\"\"}
[string]$var = $colLogicalDisk.Size /1GB
$LogicalDisks.Set_item(\"Size\",[string]$var)
$LogicalDisks.Set_item(\"FreeSpace\",[string]$colLogicalDisk.FreeSpace)
$LogicalDisks.Set_item(\"DriveType\",[string]$colLogicalDisk.DriveType)
$LogicalDisks.Set_item(\"MediaType\",[string]$colLogicalDisk.MediaType)
$LogicalDisks.Set_item(\"VolumeName\",[string]$colLogicalDisk.VolumeName)
$LogicalDisks.Set_item(\"Name\",[string]$colLogicalDisk.Name)
$LogicalDisks.Set_item(\"Caption\",[string]$colLogicalDisk.Caption)
$LogicalDisks.Set_item(\"Description\",[string]$colLogicalDisk.Description)
$LogicalDisks.Set_item(\"SystemName\",[string]$colLogicalDisk.SystemName)
$LogicalDisks.Set_item(\"ProviderName\",[string]$colLogicalDisk.ProviderName)
$type = FindLogicalDiskType $colLogicalDisk.deviceid $colLogicalDisk.DriveType $colLogicalDisk.Size
$LogicalDisks.Set_item(\"Type\",[string]$type)
$ArrLDisk += ,$LogicalDisks
$i++
}
}else{
Write-host \"There is no Logical Disk on \" $colPart.DeviceID
}
}
return $ArrLDisk
}[/code:1]
merci pour votre aide.
Tarik
Bon je n'ai pas réussi à placer un hashtable dans un hashtable donc j'ai contourné le problème en mettant les infos dans un array.
ci dessous le code:
[code:1]function GetDevices{
$AllDiskDrive = GWMI -CL Win32_DiskDrive
$diskID = 0
[hashtable]$Devices =@{}
Write-host \"Disk number: \"$AllDiskDrive.Count
## Check all Disk Drive
foreach($diskDrive in $AllDiskDrive){
$strDriveDeviceID = [string]$diskDrive.deviceid
$Devices.\"$diskID\" = @{DeviceID=\"\";ID=\"\";Status=\"\";TotalSize=\"\";Partition=\"\";Type=\"\";LogicalDisks=\"\"}
$Devices.\"$diskID\".Set_item(\"ID\",$diskID)
$Devices.\"$diskID\".Set_item(\"DeviceID\",$strDriveDeviceID)
$Devices.\"$diskID\".Set_item(\"TotalSize\",[string]$diskDrive.Size /1GB«»)
## Check all Partitions on the Disk
$query1 = \"Associators of {Win32_DiskDrive.DeviceID='$strDriveDeviceID'} where AssocClass=Win32_DiskDriveToDiskPartition\"
$colPartitions = get-wmiobject -query $query1
if($colPartitions -eq $NULL){
Write-host -f red \"No partitions\"
$Devices.\"$diskID\".Set_item(\"Partition\",\"0\"«»)
$type = FindDriveType ($diskDrive.Size /1GB«»)
$Devices.\"$diskID\".Set_item(\"Type\",[string]$type)
$Devices.\"$diskID\".Set_item(\"Status\",\"READY\"«»)
}else{
$Devices.\"$diskID\".Set_item(\"Status\",\"LOCKED\"«»)
if($colPartitions.Count -ge 2){
$Devices.\"$diskID\".Set_item(\"Partition\",$colPartitions.Count)
}else{
$Devices.\"$diskID\".Set_item(\"Partition\",\"1\"«»)
}
## Check All Logical Disk of partitionss
$ArrLogicalDisks = GetLogicalDisk($colPartitions)
$Devices.\"$diskID\".Set_item(\"LogicalDisks\",$ArrLogicalDisks)
}
$diskID++
}
$ArrDevices = $diskID,$Devices
return $ArrDevices
} [/code:1]
[code:1] function GetLogicalDisk($colPartitions){
[array]$ArrLDisk = $NULL
foreach($colPart in $colPartitions) {
$strPartitionDeviceID = [string]$colPart.DeviceID
$query2 = \"Associators of {Win32_DiskPartition.DeviceID='$strPartitionDeviceID'} where AssocClass=Win32_LogicalDiskToPartition\"
$colLogicalDisks = Get-WmiObject -query $query2
if($colLogicalDisks){
[hashtable]$LogicalDisks = @{}
$i = 0
foreach($colLogicalDisk in $colLogicalDisks){
$LogicalDisks = @{Type=\"\";Size=\"\";FreeSpace=\"\";DriveType=\"\";MediaType=\"\";Caption=\"\";Description=\"\";VolumeName=\"\";DeviceID=\"\";SystemName=\"\";ProviderName=\"\"}
[string]$var = $colLogicalDisk.Size /1GB
$LogicalDisks.Set_item(\"Size\",[string]$var)
$LogicalDisks.Set_item(\"FreeSpace\",[string]$colLogicalDisk.FreeSpace)
$LogicalDisks.Set_item(\"DriveType\",[string]$colLogicalDisk.DriveType)
$LogicalDisks.Set_item(\"MediaType\",[string]$colLogicalDisk.MediaType)
$LogicalDisks.Set_item(\"VolumeName\",[string]$colLogicalDisk.VolumeName)
$LogicalDisks.Set_item(\"Name\",[string]$colLogicalDisk.Name)
$LogicalDisks.Set_item(\"Caption\",[string]$colLogicalDisk.Caption)
$LogicalDisks.Set_item(\"Description\",[string]$colLogicalDisk.Description)
$LogicalDisks.Set_item(\"SystemName\",[string]$colLogicalDisk.SystemName)
$LogicalDisks.Set_item(\"ProviderName\",[string]$colLogicalDisk.ProviderName)
$type = FindLogicalDiskType $colLogicalDisk.deviceid $colLogicalDisk.DriveType $colLogicalDisk.Size
$LogicalDisks.Set_item(\"Type\",[string]$type)
$ArrLDisk += ,$LogicalDisks
$i++
}
}else{
Write-host \"There is no Logical Disk on \" $colPart.DeviceID
}
}
return $ArrLDisk
}[/code:1]
merci pour votre aide.
Tarik
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6300
- Remerciements reçus 68
il y a 15 ans 5 mois #2892
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Hashtable dans un hashtable possible?
De mon coté avec le code suivant :
[code:1]
function ReadFileSystem()
{
$AllDiskDrive = GWMI -CL Win32_DiskDrive
$diskID = 0
[hashtable]$Devices =@{}
foreach($diskDrive in $AllDiskDrive){
$strDriveDeviceID = [string]$diskDrive.deviceid
$Devices.\"$diskID\" = @{DeviceID=\"\";Status=\"\";Partition=\"\";type=\"\";LogicalDisks=\"\"}
$Devices.\"$diskID\".DeviceID=$strDriveDeviceID
$Devices.\"$diskID\".Status=\"NONE\"
$Devices.\"$diskID\".TotalSize=[string]$diskDrive.Size /1GB
$query1 = \"Associators of {Win32_DiskDrive.DeviceID='$strDriveDeviceID'} where AssocClass=Win32_DiskDriveToDiskPartition\"
$colPartitions = get-wmiobject -query $query1
if($colPartitions -eq $NULL){
Write-host -f red \"No partitions\"
$Devices.\"$diskID\".Partition=0
}
else
{
$Devices.\"$diskID\".Partition=$colPartitions.Count
}
foreach($colPart in $colPartitions) {
$strPartitionDeviceID = [string]$colPart.DeviceID
$query2 = \"Associators of {Win32_DiskPartition.DeviceID='$strPartitionDeviceID'} where AssocClass=Win32_LogicalDiskToPartition\"
$colLogicalDisks = Get-WmiObject -query $query2
if($colLogicalDisks){
[hashtable]$LogicalDisks = @{}
$i = 0
foreach($colLogicalDisk in $colLogicalDisks){
$LogicalDisks.\"$i\" = @{Type=\"\";Size=\"\";FreeSpace=\"\";DriveType=\"\";MediaType=\"\";VolumeName=\"\";DeviceID=\"\";}
Write-host \"Disk Size: \"($diskDrive.Size /1GB«»)
Write-host \"SCSILogicalUnit: \"$diskDrive.SCSILogicalUnit
Write-host \"SCSITargetId: \"$diskDrive.SCSITargetId
Write-host \"Partitions: \"$diskDrive.Partitions
Write-host \"DiskID: \"$diskID \" has \"$diskDrive.Partitions \" partition(s)\"
Write-host \"Physical Disk:\" $diskDrive.caption \" -- \" $diskDrive.deviceid
Write-host \"Disk Partition: \" $colPart.DeviceID
Write-host \"DriveType: \"$colLogicalDisk.DriveType
Write-host \"MediaType: \"$colLogicalDisk.MediaType
Write-host \"VolumeName: \"$colLogicalDisk.VolumeName
Write-host \"Logical Disk: \" $colLogicalDisk.deviceid
Write-host \"FreeSpace: \" ($colLogicalDisk.FreeSpace /1GB«»)
Write-host \"Logical Size:\" ($colLogicalDisk.Size /1GB«»)
Write-host
[string]$var = $colLogicalDisk.Size /1GB
$LogicalDisks.\"$i\".Size=$var
$LogicalDisks.\"$i\".FreeSpace=[string]$colLogicalDisk.FreeSpace
$LogicalDisks.\"$i\".DriveType=[string]$colLogicalDisk.DriveType
$LogicalDisks.\"$i\".MediaType=[string]$colLogicalDisk.MediaType
$LogicalDisks.\"$i\".VolumeName=$colLogicalDisk.VolumeName
$LogicalDisks.\"$i\".DeviceID=[string]$colLogicalDisk.deviceid
$i++
}
$Devices.\"$diskID\".LogicalDisks=$LogicalDisks
}
}
$diskID++
}
$devices
}
$HD=ReadFileSystem
[/code:1]
Ensuite:
[code:1]
>$hd
Name Value
----
0 {LogicalDisks, type, Partition, Status...}
1 {LogicalDisks, type, Partition, Status...}
> $hd.\"0\"
Name Value
----
LogicalDisks {0}
type
Partition
Status NONE
DeviceID \\.\PHYSICALDRIVE1
TotalSize 149,048187732697
> $hd.\"0\".logicalDisks.\"0\"
Name Value
----
Size 149.048156738281
VolumeName Secondaire
Type
FreeSpace 34208002048
MediaType 12
DriveType 3
DeviceID G:
>$hd.\"0\".logicalDisks.\"0\".VolumeName
Secondaire
[/code:1]
n'ayant pas de disque partitionné :
[code:1]
#récupère les infos, en les dupliquant, de de la partition 1 : clé 0
$P=($hd.\"0\".logicalDisks.\"0\"«»).Clone()
# avec $P=$hd.\"0\".logicalDisks.\"0\" on récupére la même référence de hashtable
$p.VolumeName=\"Test\"
#l'ajoute à la HT logicalDisks avec une nouvelle clé nommé \"1\"
$hd.\"0\".logicalDisks.\"1\"=$p
$hd.\"0\".logicalDisks
Name Value
----
0 {Size, VolumeName, Type, FreeSpace...}
1 {Size, VolumeName, Type, FreeSpace...}
$hd.\"0\".logicalDisks.\"0\".VolumeName
#Secondaire
$hd.\"0\".logicalDisks.\"1\".VolumeName
#Test
#Test l'affectation de hashtable
$Ld=$hd.\"0\".logicalDisks
$hd.\"0\".logicalDisks=$null
$hd.\"0\".logicalDisks
#Vide
$hd.\"0\".logicalDisks=$Ld
$hd.\"0\".logicalDisks
Name Value
----
0 {Size, VolumeName, Type, FreeSpace...}
1 {Size, VolumeName, Type, FreeSpace...}
#Vérification
$hd.\"0\".logicalDisks.\"0\".VolumeName
#Secondaire
$hd.\"0\".logicalDisks.\"1\".VolumeName
#Test
[/code:1]
J'ai du mal à voir ce qui cela ne fonctionne pas.
Pour info on peut créer une hashtable dont la clé est un objet :
[code:1]
$HO=@{}
$HO.$p=10
$HO
Name Value
----
{Size, VolumeName, Type, Fr... 10
[/code:1]
Mais là n'est pas le sujet.
[code:1]
function ReadFileSystem()
{
$AllDiskDrive = GWMI -CL Win32_DiskDrive
$diskID = 0
[hashtable]$Devices =@{}
foreach($diskDrive in $AllDiskDrive){
$strDriveDeviceID = [string]$diskDrive.deviceid
$Devices.\"$diskID\" = @{DeviceID=\"\";Status=\"\";Partition=\"\";type=\"\";LogicalDisks=\"\"}
$Devices.\"$diskID\".DeviceID=$strDriveDeviceID
$Devices.\"$diskID\".Status=\"NONE\"
$Devices.\"$diskID\".TotalSize=[string]$diskDrive.Size /1GB
$query1 = \"Associators of {Win32_DiskDrive.DeviceID='$strDriveDeviceID'} where AssocClass=Win32_DiskDriveToDiskPartition\"
$colPartitions = get-wmiobject -query $query1
if($colPartitions -eq $NULL){
Write-host -f red \"No partitions\"
$Devices.\"$diskID\".Partition=0
}
else
{
$Devices.\"$diskID\".Partition=$colPartitions.Count
}
foreach($colPart in $colPartitions) {
$strPartitionDeviceID = [string]$colPart.DeviceID
$query2 = \"Associators of {Win32_DiskPartition.DeviceID='$strPartitionDeviceID'} where AssocClass=Win32_LogicalDiskToPartition\"
$colLogicalDisks = Get-WmiObject -query $query2
if($colLogicalDisks){
[hashtable]$LogicalDisks = @{}
$i = 0
foreach($colLogicalDisk in $colLogicalDisks){
$LogicalDisks.\"$i\" = @{Type=\"\";Size=\"\";FreeSpace=\"\";DriveType=\"\";MediaType=\"\";VolumeName=\"\";DeviceID=\"\";}
Write-host \"Disk Size: \"($diskDrive.Size /1GB«»)
Write-host \"SCSILogicalUnit: \"$diskDrive.SCSILogicalUnit
Write-host \"SCSITargetId: \"$diskDrive.SCSITargetId
Write-host \"Partitions: \"$diskDrive.Partitions
Write-host \"DiskID: \"$diskID \" has \"$diskDrive.Partitions \" partition(s)\"
Write-host \"Physical Disk:\" $diskDrive.caption \" -- \" $diskDrive.deviceid
Write-host \"Disk Partition: \" $colPart.DeviceID
Write-host \"DriveType: \"$colLogicalDisk.DriveType
Write-host \"MediaType: \"$colLogicalDisk.MediaType
Write-host \"VolumeName: \"$colLogicalDisk.VolumeName
Write-host \"Logical Disk: \" $colLogicalDisk.deviceid
Write-host \"FreeSpace: \" ($colLogicalDisk.FreeSpace /1GB«»)
Write-host \"Logical Size:\" ($colLogicalDisk.Size /1GB«»)
Write-host
[string]$var = $colLogicalDisk.Size /1GB
$LogicalDisks.\"$i\".Size=$var
$LogicalDisks.\"$i\".FreeSpace=[string]$colLogicalDisk.FreeSpace
$LogicalDisks.\"$i\".DriveType=[string]$colLogicalDisk.DriveType
$LogicalDisks.\"$i\".MediaType=[string]$colLogicalDisk.MediaType
$LogicalDisks.\"$i\".VolumeName=$colLogicalDisk.VolumeName
$LogicalDisks.\"$i\".DeviceID=[string]$colLogicalDisk.deviceid
$i++
}
$Devices.\"$diskID\".LogicalDisks=$LogicalDisks
}
}
$diskID++
}
$devices
}
$HD=ReadFileSystem
[/code:1]
Ensuite:
[code:1]
>$hd
Name Value
----
0 {LogicalDisks, type, Partition, Status...}
1 {LogicalDisks, type, Partition, Status...}
> $hd.\"0\"
Name Value
----
LogicalDisks {0}
type
Partition
Status NONE
DeviceID \\.\PHYSICALDRIVE1
TotalSize 149,048187732697
> $hd.\"0\".logicalDisks.\"0\"
Name Value
----
Size 149.048156738281
VolumeName Secondaire
Type
FreeSpace 34208002048
MediaType 12
DriveType 3
DeviceID G:
>$hd.\"0\".logicalDisks.\"0\".VolumeName
Secondaire
[/code:1]
n'ayant pas de disque partitionné :
[code:1]
#récupère les infos, en les dupliquant, de de la partition 1 : clé 0
$P=($hd.\"0\".logicalDisks.\"0\"«»).Clone()
# avec $P=$hd.\"0\".logicalDisks.\"0\" on récupére la même référence de hashtable
$p.VolumeName=\"Test\"
#l'ajoute à la HT logicalDisks avec une nouvelle clé nommé \"1\"
$hd.\"0\".logicalDisks.\"1\"=$p
$hd.\"0\".logicalDisks
Name Value
----
0 {Size, VolumeName, Type, FreeSpace...}
1 {Size, VolumeName, Type, FreeSpace...}
$hd.\"0\".logicalDisks.\"0\".VolumeName
#Secondaire
$hd.\"0\".logicalDisks.\"1\".VolumeName
#Test
#Test l'affectation de hashtable
$Ld=$hd.\"0\".logicalDisks
$hd.\"0\".logicalDisks=$null
$hd.\"0\".logicalDisks
#Vide
$hd.\"0\".logicalDisks=$Ld
$hd.\"0\".logicalDisks
Name Value
----
0 {Size, VolumeName, Type, FreeSpace...}
1 {Size, VolumeName, Type, FreeSpace...}
#Vérification
$hd.\"0\".logicalDisks.\"0\".VolumeName
#Secondaire
$hd.\"0\".logicalDisks.\"1\".VolumeName
#Test
[/code:1]
J'ai du mal à voir ce qui cela ne fonctionne pas.
Pour info on peut créer une hashtable dont la clé est un objet :
[code:1]
$HO=@{}
$HO.$p=10
$HO
Name Value
----
{Size, VolumeName, Type, Fr... 10
[/code:1]
Mais là n'est pas le sujet.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Tarik
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
il y a 15 ans 5 mois #2958
par Tarik
Réponse de Tarik sur le sujet Re:Hashtable dans un hashtable possible?[Resolu]
merci ca m'a aidé
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.080 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- Hashtable dans un hashtable possible?