Après avoir tiré des données de SQL dans PowerShell, j'ai un jeu de données. Comment puis-je convertir cela en un tableau?
Si je demande des informations dans la table I tirée, je reçois: p> $ data.Tables | GM code> me donne typename: system.data.dataset code> p> $data.Tables | fl
ServerName : Server10
SamAccount : Admin-Server10
3 Réponses :
Essentiellement, vous devez vous dérouler tout pour aller d'un réseau multidimensionnel à une matrice de dimension unique. Le chemin d'accès d'un jeu de données à une seule ligne est la suivante: qui est: p> ou, pour une doublure simplifiée : p> ceci vous permet ensuite d'accéder aux propriétés que vous attendez. p>
Cela lui permet de faire référence facilement aux choses, mais ses données sont réglées à la lecture, de sorte qu'il ne peut manipuler aucune valeur, ce qui était le point de son poste.
Cela explique comment accéder aux données a réessayées, mais cela ne me laissait toujours pas le manipuler. Si je me suis fatigué $ DataSet.tables [0] .Rows [0] .Servername = "Test" code> Il échoue toujours.
Non, n'utilisez pas $ DataSet.Tables [0] .ors [0] .Servername code> car, oui, le jeu de données est en lecture seule. Attribuez la ligne à la variable code> de ligne code> et utilisez le datarow tel qu'il n'est pas lu uniquement.
Vous pouvez créer un objet pour chaque ligne, puis renseigner leurs valeurs en fonction des colonnes de la table. Cela vous donnerait une pscustomObject pour chaque ligne avec des propriétés que vous pouvez faire référence et modification.
$MyArray = ForEach($Row in $Data.Tables[0].Rows){
$Record = New-Object PSObject
ForEach($Col in $Data.Tables[0].Columns.ColumnName){
Add-Member -InputObject $Record -NotePropertyName $Col -NotePropertyValue $Row.$Col
}
$Record
}
Peut-être que je manque quelque chose de simple. Utilisation de votre code exactement comme écrit, lorsque je tape $ myarray, je vois les sous-types. Mais si j'essaie de faire un myarray.servername = "dd" code> il échoue à dire que la propriété est introuvable sur l'objet.
C'est parce que $ myarray code> est un tableau d'objets. Vous pouvez supprimer le [tableau] code> de la première ligne ou référencer l'objet dans la matrice par index $ myarray [0] .Servername = "dd" code>
Testé cela, sans référence [tableau], c'est exactement ce que j'essayais d'y aller. Merci .. vous avez 26k (en ce moment), les points peuvent donc ne pas dire grand chose, mais ils sont à vous. Même les valeurs dans le nouvel objet conservent des types. (string vs booléen). Parfait, merci..
La réponse donnée par ThemadTechnicien est correcte. Voici une autre manière plus rapide (si nous parlons de milliers de lignes) qui ne bouclent que les noms de colonne une fois et stockent les objets dans une arrayliste
Premièrement, obtenez tous les noms de propriété P>
$arrayList = New-Object System.Collections.ArrayList
Foreach($row in $DataSet.Tables[0]) {
$arrayList.Add(($row | Select-Object $Properties)) > $null;
}
On dirait que la seule ligne est la raison pour laquelle ce n'est pas un tableau pour commencer. Parce que ce n'est pas le cas. Si vous obtenez votre jeu de données dans un «objet» PowerShell (variable) et do $ data [0] Qu'est-ce qu'il retourne?