Question
création d'une collection d'objets
- otokonohito
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 21
- Remerciements reçus 0
je suis nouveau venue sur le forum.
Il y a un concept que je n'arrive pas à mettre en place avec Powershell.
Voici mon problème :
Je souhaite réaliser mes propres objects pour ensuite pouvoir les exporter.
j'utilise donc la commande suivante
$output = new-object PSObject
J'ajoute des propriétés à mon objet avec
$output | add-member noteproperty variable1 \"valeur1\"
Jusque là ça marche.
Mais je n'arrive pas générer une collection d'objet.
Je souhaiterais pouvoir en sortie faire
$output[0] et avoir les propriétés de mon object 0
$output[1] et avoir les propriétés de mon objet 1
ainsi de suite...
mais quand je tape
$output[0] | add-member noteproperty variable1 \"valeur1\"
j'ai une erreur.
Est ce que quelqu'un sait comment créer sa propre collection d'objet?
Merci de vos retours
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
otokonohito écrit:
Déjà déterminer quelle type de collection tu souhaites.Est ce que quelqu'un sait comment créer sa propre collection d'objet?
La plus courante, un tableau:
[code:1]
#tableau de 5 éléments de 0 à 4
$Output=new-object System.Management.Automation.PSObject[] 5
#ou,tableau vide
[System.Management.Automation.PSObject[]] $output = @()
#plus concis, un tableau vide
$output = @()
[/code:1]
Pour l'ajout
[code:1]
#tableau vide
$output += New-Object MonObjet
#ou sur un tableau contenant 5 éléments
$output[5]= New-Object MonObjet
[/code:1]
otokonohito écrit:
Tu récupères avant cela un objet$output[1] et avoir les propriétés de mon objet 1
otokonohito écrit:
Tu ne peux pas indexer un objet, seulement une collection. Ici ton objet n'est pas un tableau.mais quand je tape
$output[0] | add-member noteproperty variable1 \"valeur1\"
j'ai une erreur.
Ensuite il me semble qu'il y ait un bug avec cette approche:
[code:1]$output[0]=$output[0]|add-member noteproperty Note 10 -pass[/code:1]
Je vais vérifier ça.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- otokonohito
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 21
- Remerciements reçus 0
Je connais toutes mes requêtes AD et WMI que j'enregistre dans des variables.
J'aimerais avoir un objet de mon cru comme $test suivant :
[code:1]$test = get-childitem
$test.gettype()
IsPublic IsSerial Name BaseType
True True Object[] System.Array[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Si les informations des machines proviennent d'une seule source, WMI par exemple, utilise Select-objectEn fait je souhaite faire une collection de machines avec des propriétés comme le nom, l'adresseIP, l'OS,...
[code:1]
$MesObjets=$Machines|Select Name,IP,OS
[/code:1]
Si tu as + sources, tu dois utiliser add-Member ou combiner les 2 approches.
[code:1]
$Collection=gwmi \"win32_process\"|select name,ThreadCount,truc|% {$_.truc=$FromAD.Property}
[/code:1]
otokonohito écrit:
Dans cet exemple, je n'y vois pas d'objet personnalisé. Je pense qu'ici on n'utilise pas les mêmes mots pour définir la même choseJ'aimerais avoir un objet de mon cru comme $test suivant
Tu peux aussi consulter ce tutoriel .
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- otokonohito
- Auteur du sujet
- Hors Ligne
- Membre junior
-
- Messages : 21
- Remerciements reçus 0
[code:1]$ordis = new-object System.Management.Automation.PsObject[] 2
$ordis.count
$ordis.gettype()
$ordis[0] = \"ordi1\"
$ordis[1] = \"ordi2\"
add-member -inputobject $ordis[0] -membertype noteproperty -name \"ordi\" -value \"SRV1\"
add-member -inputobject $ordis[0] -membertype noteproperty -name \"os\" -value \"Win2008\"
add-member -inputobject $ordis[0] -membertype noteproperty -name \"sp\" -value \"SP1\"
add-member -inputobject $ordis[1] -membertype noteproperty -name \"ordi\" -value \"SRV2\"
add-member -inputobject $ordis[1] -membertype noteproperty -name \"os\" -value \"Win2003\"
add-member -inputobject $ordis[1] -membertype noteproperty -name \"sp\" -value \"SP2\"[/code:1]
Une collection d'objet ordinateur mais j'ai encore un soucis.
La commande format-list ne voit pas les propriétés du type \"Noteproperty\" et lorsque j'exporte en CSV ma collection, le résultat est mal formaté. Je ne peux pas choisir les champs que je veux afficher. Il m'affiche tous les champs de type property et noteproperty.
[code:1]PS $ordi | export-csv $home\export.csv
PS get-content $home\export.csv
#TYPE System.String
\"ordi\",\"os\",\"sp\",\"Length\"
\"SRV1\",\"Win2008\",\"SP1\",\"5\"
\"SRV2\",\"Win2003\",\"SP2\",\"5\"[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
[code:1]
$ordis[0].gettype()
IsPublic IsSerial Name BaseType
----
True True String System.Object
[/code:1]
Pour exporter un sous-ensemble il faut faire ceci :
[code:1]
$ordis|select name,os|export-csv test.txt
[/code:1]
La première ligne du fichier csv sera dans ce cas différente :
[code:1]
#TYPE System.Management.Automation.PSCustomObject
[/code:1]
Idem pour Format-List :
[code:1]
$ordis|ft os,sp #ne fonctionne pas
$ordis|select os,sp|ft os,sp
[/code:1]
Avec l'approche suivante
[code:1]
$ordis = new-object System.Management.Automation.PsObject[] 2
$ordis.count
$ordis.gettype()
$ordis[0] = 1|Select Name,os,sp
$ordis[1] = 1|Select Name,os,sp
$ordis[0].name=\"SRV1\"
$ordis[0].os=\"Win2008\"
$ordis[0].sp=\"SP1\"
$ordis[1].name=\"SRV2\"
$ordis[1].os=\"Win2003\"
$ordis[1].sp=\"SP2\"
$ordis
[/code:1]
Tu crées 2 objets ayant 3 propriétés, ainsi tu récupéres directement des objets personnalisés et plus des objets \"enrichis\" :
[code:1]
$ordis[0].gettype()
IsPublic IsSerial Name BaseType
----
True False PSCustomObject System.Object
[/code:1]
Du coup Format-List répond bien :
[code:1]
$ordis|ft os,sp
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- création d'une collection d'objets