Question Addition contenu de 2 objets

Plus d'informations
il y a 15 ans 10 mois #2467 par Laurent Dardenne
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 :whistle:

$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.

Plus d'informations
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+

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 10 mois #2470 par Laurent Dardenne
camilleB écrit:

Mais je vais tester ta solution qui me semble plus rapide!

Il faut prêter une attention particulière à l'usage de tableau sous .NET.
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.

Plus d'informations
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?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 10 mois #2493 par Laurent Dardenne
camilleB écrit:

Hummm comment faire?

Une solution, peut être pas la plus simple :whistle:

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
Propulsé par Kunena