Question
Addition contenu de 2 objets
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 15 ans 10 mois #2467
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Addition contenu de 2 objets
Dans ce cas ceci peut suffire:
[code:1]
$MachineMinimum=10
$PCListe= New-Object System.Collections.ArrayList($MachineMinimum)
\"localhost\",\"localhost\",\"localhost\"| foreach {
$MANUFACTURER_MODELE_RAM_NAME=gwmi Win32_ComputerSystem -computername $_
$NOM = $MANUFACTURER_MODELE_RAM_NAME.name
$MANUFACTURER=$MANUFACTURER_MODELE_RAM_NAME.Manufacturer
$RAM = ($MANUFACTURER_MODELE_RAM_NAME.TotalPhysicalMemory)/1MB
$MODELE = $MANUFACTURER_MODELE_RAM_NAME.Model
$SN = (gwmi Win32_computersystemproduct -computername $_).IdentifyingNumber
$DISK = gwmi win32_logicaldisk -filter \"DriveType=3\" -computername $_
$CurrentPC = New-Object PSObject
$CurrentPC| add-member NoteProperty NOM $NOM -PassThru|`
add-member NoteProperty MODELE $MODELE -PassThru|`
add-member NoteProperty FABRIQUANT $MANUFACTURER -PassThru|`
add-member NoteProperty SN $SN -PassThru|`
add-member NoteProperty RAM $RAM -PassThru|`
add-member NoteProperty DISK $DISK
[void]$PCListe.Add($CurrentPC)
}
$PCListe | select nom,modele,fabriquant,sn,disk | Format-Table -AutoSiz
[/code:1]
Reste à replacer l'appel de alive.
Une petite remarque, le typage pour new-object n'est pas nécessaire car on connait le type
Quant au pipeline avec add-member, c'est peut être plus performant mais c'est une supposition car je n'ai pas le fait de tests de performance
$MachineMinimum permet de donner une taille d'origine à la liste ensuite elle est augmentée automatiquement selon les demandes. Voir la doc du SDK...
[code:1]
$MachineMinimum=10
$PCListe= New-Object System.Collections.ArrayList($MachineMinimum)
\"localhost\",\"localhost\",\"localhost\"| foreach {
$MANUFACTURER_MODELE_RAM_NAME=gwmi Win32_ComputerSystem -computername $_
$NOM = $MANUFACTURER_MODELE_RAM_NAME.name
$MANUFACTURER=$MANUFACTURER_MODELE_RAM_NAME.Manufacturer
$RAM = ($MANUFACTURER_MODELE_RAM_NAME.TotalPhysicalMemory)/1MB
$MODELE = $MANUFACTURER_MODELE_RAM_NAME.Model
$SN = (gwmi Win32_computersystemproduct -computername $_).IdentifyingNumber
$DISK = gwmi win32_logicaldisk -filter \"DriveType=3\" -computername $_
$CurrentPC = New-Object PSObject
$CurrentPC| add-member NoteProperty NOM $NOM -PassThru|`
add-member NoteProperty MODELE $MODELE -PassThru|`
add-member NoteProperty FABRIQUANT $MANUFACTURER -PassThru|`
add-member NoteProperty SN $SN -PassThru|`
add-member NoteProperty RAM $RAM -PassThru|`
add-member NoteProperty DISK $DISK
[void]$PCListe.Add($CurrentPC)
}
$PCListe | select nom,modele,fabriquant,sn,disk | Format-Table -AutoSiz
[/code:1]
Reste à replacer l'appel de alive.
Une petite remarque, le typage pour new-object n'est pas nécessaire car on connait le type
Quant au pipeline avec add-member, c'est peut être plus performant mais c'est une supposition car je n'ai pas le fait de tests de performance
$MachineMinimum permet de donner une taille d'origine à la liste ensuite elle est augmentée automatiquement selon les demandes. Voir la doc du SDK...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 88
- Remerciements reçus 0
il y a 15 ans 10 mois #2468
par bordin
Réponse de bordin sur le sujet Re:Addition contenu de 2 objets
salut,
une recherche sur le net m'a permis de trouver comment créer un array d'objets PSOBJECT.
voila le lien: get-powershell.com/2008/03/04/creating-a...hell-custom-objects/
Du coup c'est beaucoup mieux déjà!!
J'ai rajouté dans la boucle ceci:
[code:1]
foreach ($obj in $objettmp)
{
$arrayObj = “” | Select-Object nom,modele,fabriquant,sn,ram,disk
$arrayObj.nom=$obj.nom
$arrayObj.modele=$obj.modele
$arrayObj.fabriquant=$obj.fabriquant
$arrayObj.sn=$obj.sn
$arrayObj.ram=$obj.ram
$stringNomDisk= $obj.disk
$arrayObj.disk=$obj.disk
$audit = $audit + $arrayObj
[/code:1]
Mais je vais tester ta solution qui me semble plus rapide!
A+
une recherche sur le net m'a permis de trouver comment créer un array d'objets PSOBJECT.
voila le lien: get-powershell.com/2008/03/04/creating-a...hell-custom-objects/
Du coup c'est beaucoup mieux déjà!!
J'ai rajouté dans la boucle ceci:
[code:1]
foreach ($obj in $objettmp)
{
$arrayObj = “” | Select-Object nom,modele,fabriquant,sn,ram,disk
$arrayObj.nom=$obj.nom
$arrayObj.modele=$obj.modele
$arrayObj.fabriquant=$obj.fabriquant
$arrayObj.sn=$obj.sn
$arrayObj.ram=$obj.ram
$stringNomDisk= $obj.disk
$arrayObj.disk=$obj.disk
$audit = $audit + $arrayObj
[/code:1]
Mais je vais tester ta solution qui me semble plus rapide!
A+
Connexion ou Créer un compte pour participer à la conversation.
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 88
- Remerciements reçus 0
il y a 15 ans 10 mois #2469
par bordin
Réponse de bordin sur le sujet Re:Addition contenu de 2 objets
Salut,
la solution avec System.Collections.ArrayList fonctionne aussi très bien!
Par contre l'affichage à la console n'est pas top!
Par exemple pour disk, j'obtiens un truc du style:
\\SCAFILES2\root\cimv2:Win32_LogicalDisk.DeviceID=...
ou çà : {C:, D:}
je vais essayer de creuser encore un peu!
Si vous avez une astuce, je suis preneur.
Merci!
cdt
la solution avec System.Collections.ArrayList fonctionne aussi très bien!
Par contre l'affichage à la console n'est pas top!
Par exemple pour disk, j'obtiens un truc du style:
\\SCAFILES2\root\cimv2:Win32_LogicalDisk.DeviceID=...
ou çà : {C:, D:}
je vais essayer de creuser encore un peu!
Si vous avez une astuce, je suis preneur.
Merci!
cdt
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 15 ans 10 mois #2470
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Addition contenu de 2 objets
camilleB écrit:
Pour les ID de disques tu récupéres une collection :
[code:1]$disk[0].deviceid[/code:1]
Le nom de la variable serait plutôt $Disks, enfin c'est un détail.
Il faut prêter une attention particulière à l'usage de tableau sous .NET.Mais je vais tester ta solution qui me semble plus rapide!
Pour les ID de disques tu récupéres une collection :
[code:1]$disk[0].deviceid[/code:1]
Le nom de la variable serait plutôt $Disks, enfin c'est un détail.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 88
- Remerciements reçus 0
il y a 15 ans 10 mois #2492
par bordin
Réponse de bordin sur le sujet Re:Addition contenu de 2 objets
Salut,
Merci Laurent pour tes conseils!
j'ai traité à part chaque propriétés des disks dans un array. Puis je les ai ajouté à l'objet global. Ce qui me donne au final.
NOM MODELE FABRIQUANT SN RAM Partition Size FreeSpace
---
-- ---
----
Serveur1 -[8888ZZZ]- IBM KKKKZD2 7167 {C:, D:, C:, E:} {5, 200, 8, 26} {3067, 7994, 869, 1400}
Serveur2 -[8888ZZZ]- IBM 552046M 511 {C:, D:, C:, E:} {5, 200, 8, 26} {3067, 7994, 869, 1400}
l'idéal se serait d'afficher les partitions, la taille, l'espace libre les un après les autres pour plus de clarté!
Hummm comment faire?
Merci Laurent pour tes conseils!
j'ai traité à part chaque propriétés des disks dans un array. Puis je les ai ajouté à l'objet global. Ce qui me donne au final.
NOM MODELE FABRIQUANT SN RAM Partition Size FreeSpace
---
-- ---
----
Serveur1 -[8888ZZZ]- IBM KKKKZD2 7167 {C:, D:, C:, E:} {5, 200, 8, 26} {3067, 7994, 869, 1400}
Serveur2 -[8888ZZZ]- IBM 552046M 511 {C:, D:, C:, E:} {5, 200, 8, 26} {3067, 7994, 869, 1400}
l'idéal se serait d'afficher les partitions, la taille, l'espace libre les un après les autres pour plus de clarté!
Hummm comment faire?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 15 ans 10 mois #2493
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Addition contenu de 2 objets
camilleB écrit:
Si tu souhaites afficher le type explicitement :
[code:1]
$DriveTypes=@{1=\"Drive could not be determined.\";
2= \"Removable Drive\"
3= \"Local hard disk\";
4= \"Network disk\" ;
5= \"Compact disk (CD)\";
6= \"RAM disk\"}
[/code:1]
Select peut utiliser une hashtable \"personalisée\" :
[code:1]
$hastable=@{Name=\"NomDeColonne\";Expression={Valeur}}
...|Select $hastable|...
[/code:1]
Donc :
[code:1]
$InfosDisques=@{N=\"InfosDisques\";Expression={ $Disk|%{ \"{0} `\"{1}`\" {2} {3}\" -f ($_.DeviceID,$DriveTypes[[int]$_.DriveType],[math]::truncate(($_.Size/1GB«»)),[math]::truncate(($_.FreeSpace/1GB«»)))}}}
$PCListe | select nom,modele,fabriquant,sn,$InfosDisques | Format-Table -AutoSize
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 28/06/08 17:36
Une solution, peut être pas la plus simpleHummm comment faire?
Si tu souhaites afficher le type explicitement :
[code:1]
$DriveTypes=@{1=\"Drive could not be determined.\";
2= \"Removable Drive\"
3= \"Local hard disk\";
4= \"Network disk\" ;
5= \"Compact disk (CD)\";
6= \"RAM disk\"}
[/code:1]
Select peut utiliser une hashtable \"personalisée\" :
[code:1]
$hastable=@{Name=\"NomDeColonne\";Expression={Valeur}}
...|Select $hastable|...
[/code:1]
Donc :
[code:1]
$InfosDisques=@{N=\"InfosDisques\";Expression={ $Disk|%{ \"{0} `\"{1}`\" {2} {3}\" -f ($_.DeviceID,$DriveTypes[[int]$_.DriveType],[math]::truncate(($_.Size/1GB«»)),[math]::truncate(($_.FreeSpace/1GB«»)))}}}
$PCListe | select nom,modele,fabriquant,sn,$InfosDisques | Format-Table -AutoSize
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 28/06/08 17:36
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.077 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Addition contenu de 2 objets