J'ai une façon de faire des tableaux dans d'autres langues comme celle-ci:
$x = "David"
$arr = @()
$arr[$x]["TSHIRTS"]["SIZE"] = "M"
Cela génère une erreur.
Vous essayez de créer un tableau associatif (hachage). Essayez la séquence de commandes suivante
$arr=@{}
$arr["david"] = @{}
$arr["david"]["TSHIRTS"] = @{}
$arr["david"]["TSHIRTS"]["SIZE"] ="M"
$arr.david.tshirts.size
Notez la différence entre les hachages et les tableaux
$a = @{} # hash
$a = @() # array
Les tableaux ne peuvent avoir que des entiers non négatifs comme index
de powershell.com:
PowerShell prend en charge deux types de tableaux multidimensionnels: les tableaux déchiquetés et les vrais tableaux multidimensionnels.
Les tableaux dentelés sont des tableaux PowerShell normaux qui stockent des tableaux en tant qu'éléments. Ce stockage est très rentable car les dimensions peuvent être de taille différente:
$array1 = 1,2,(1,2,3),3
$array1[0]
$array1[1]
$array1[2]
$array1[2][0]
$array1[2][1]
Les véritables tableaux multidimensionnels ressemblent toujours à une matrice carrée. Pour créer un tel tableau, vous devez accéder à .NET. La ligne suivante crée un tableau à deux dimensions avec 10 et 20 éléments ressemblant à une matrice 10x20:
$array2 = New-Object 'object[,]' 10,20
$array2[4,8] = 'Hello'
$array2[9,16] = 'Test'
$array2
pour un réseau 3-dimensioanl 10 * 20 * 10
$array3 = New-Object 'object[,,]' 10,20,10
Pour continuer sur ce que, manojlds, dit ci-dessus est que vous pouvez imbriquer Hashtables. Ce n'est peut-être pas un véritable tableau multidimensionnel, mais vous donne quelques idées sur la manière de structurer les données. Un exemple:
$hash = @{}
$computers | %{
$hash.Add(($_.Name),(@{
"Status" = ($_.Status)
"Date" = ($_.Date)
}))
}
Ce qui est cool à propos de ça, c'est que vous pouvez référencer des choses comme:
($hash."Name1").Status
En outre, il est beaucoup plus rapide que le tableau pour trouver des choses. J'utilise ceci pour comparer des données plutôt que d'utiliser l'appariement dans les tableaux.
$hash.ContainsKey("Name1")
J'espère que cela aide!
-Adam
Sachant que PowerShell dirige des objets entre des applets de commande , il est plus courant d'utiliser un tableau de PSCustomObjects:
$arr = @(
New-Object PSObject -Property @{Name = "David"; Article = "TShirt"; Size = "M"}
New-Object PSObject -Property @{Name = "Eduard"; Article = "Trouwsers"; Size = "S"}
)
Ou pour les versions 3 et supérieures de PowerShell:
$arr = @(
[PSCustomObject]@{Name = "David"; Article = "TShirt"; Size = "M"}
[PSCustomObject]@{Name = "Eduard"; Article = "Trouwsers"; Size = "S"}
)
Et grep votre sélection comme:
$arr | Where {$_.Name -eq "David" -and $_.Article -eq "TShirt"} | Select Size
Voici un tableau multidimensionnel simple de chaînes.
$psarray = @(
('Line' ,'One' ),
('Line' ,'Two')
)
foreach($item in $psarray)
{
$item[0]
$item[1]
}
Sortie:
Line
One
Line
Two
vous pouvez également utiliser System.Collections.ArrayList
pour créer un tableau de tableaux ou celui que vous souhaitiez ..
$resultsArray= New-Object System.Collections.ArrayList
[void] $resultsArray.Add(@(@('$hello'),2,0,0,0,0,0,0,1,1))
[void] $resultsArray.Add(@(@('$test', '$testagain'),3,0,0,1,0,0,0,1,2))
[void] $resultsArray.Add("ERROR")
[void] $resultsArray.Add(@(@('$var', '$result'),5,1,1,0,1,1,0,2,3))
[void] $resultsArray.Add(@(@('$num', '$number'),3,0,0,0,0,0,1,1,2))
Un problème, si vous appelez cela un problème, vous ne pouvez pas définir de limite. En outre, vous devez utiliser [void]
ou le script deviendra fou.