Question Fonction audit et conversion HTML

Plus d'informations
il y a 16 ans 4 mois #1319 par bordin
Bonjour,
j'ai tourné le bug dans tous les sens (pour moi!), mais je n'arrive pas à comprendre pour quoi dans cette fonction la valeur ram n'est pas remontée!
[code:1]function ScanToHTML {
$listePC | foreach {
if(alive ($_)) {
$Qtram = (gwmi Win32_OperatingSystem -computername $_).TotalVisibleMemorySize
$disk=gwmi win32_logicaldisk -filter \"DriveType=3\" -computer $_
$disk | add-member NoteProperty RAM $Qtram}
$TabDisk_Qtram+=$disk}
$TabDisk_Qtram| select @{n=\"Nom\";e={$_.__Server}},
@{n=\"Volume\";e={$_.DeviceId}},
@{n=\"Total (Mo)\";e={[math]::round($_.Size/1MB«»)}},
@{n=\"Libre (Mo)\";e={[math]::round($_.FreeSpace/1MB«»)}},
@{n=\"RAM (Go)\";e={[math]::round($TabDisk_Qtram.ram)}} | convertto-html | out-file .\auditRessource.html }[/code:1]
Quand j'affiche le contenu de la variable $disk après le $disk | add-member NoteProperty RAM $Qtram, la propriété RAM n'apparait pas!

Merci pour vos lumières!
cdt
camilleB

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

Plus d'informations
il y a 16 ans 4 mois #1320 par Jacques Barathon
Hi! Hi! PowerShell est un petit coquin!

A priori, les PC que tu interroges avec WMI ont plusieurs disques logiques. En conséquence, ta variable $disk est un tableau avec autant d'éléments que de disques récupérés.

Ensuite, lorsque tu fais \"$disk | blablabla\", tu passes à \"blablabla\" chaque élément de $disk et non pas la variable $disk en tant que telle.

Donc, la propriété RAM est en fait ajoutée à chaque élément de $disk. Tu devrais pouvoir la retrouver en faisant $disk[0].ram, mais également $disk[1].ram et ainsi de suite selon le nombre de disques.

Pour ajouter la propriété RAM au tableau $disk lui-même et non pas aux objets qu'il contient, tu aurais dû écrire:

[code:1]
add-member -in $disk NoteProperty RAM $qtRam
[/code:1]
On retrouve ce même comportement quand on fait un get-member sur un objet qui est en fait un tableau d'objets:

[code:1]
PS> $doigts = 1..5
PS> $doigts | get-member

TypeName: System.Int32

Name MemberType Definition
----

...

PS> get-member -in $doigts

TypeName: System.Object[]

Name MemberType Definition
----

...
[/code:1]CQFD :-)

Janel

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

Plus d'informations
il y a 16 ans 4 mois #1321 par bordin
Réponse de bordin sur le sujet Re:Fonction audit et conversion HTML
Salut,
Merci pour la réponse Janel. J'ai testé, mais c'est pareil!!

Que faire?

Merci

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

Plus d'informations
il y a 16 ans 4 mois #1323 par Jacques Barathon
Tiens, c'est curieux ça marche en ligne de commande mais pas dans le script. Je regarderai ça dans la journée.

En attendant, avec ta syntaxe initiale ($disk | add-member ...) tu devrais pouvoir utiliser $disk[0].ram, non? Ca donne quoi?

Janel

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

Plus d'informations
il y a 16 ans 4 mois #1327 par bordin
Réponse de bordin sur le sujet Re:Fonction audit et conversion HTML
Bonjour,

Effectivement en faisant avec çà, il y a du nouveau:
[code:1]function ScanToHTML {
$listePC | foreach {
if(alive ($_)) {
$Qtram = (gwmi Win32_OperatingSystem -computername $_).TotalVisibleMemorySize
$disk=gwmi win32_logicaldisk -filter \"DriveType=3\" -computer $_
#add-member -inputObject $disk NoteProperty RAM -value $Qtram}
$disk | add-member NoteProperty RAM -value $Qtram}
$TabDisk_Qtram+=$disk}
$TabDisk_Qtram | select @{n=\"Nom\";e={$_.__Server}},
@{n=\"Volume\";e={$_.DeviceId}},
@{n=\"Total (Mo)\";e={[math]::round($_.Size/1MB«»)}},
@{n=\"Libre (Mo)\";e={[math]::round($_.FreeSpace/1MB«»)}},
@{n=\"RAM (Go)\";e={[math]::round($TabDisk_Qtram[0].ram/1MB«»)}} | convertto-html | out-file .\auditRessource.html }[/code:1]

$TabDisk_Qtram[0].ram renvoi la ram pour le 1er pc scanné!

Autrement, j'ai voulu créer mon propre objet en faisant:
[code:1]function ScanToPS2 {
$Qtram = (gwmi Win32_OperatingSystem -computername .).TotalVisibleMemorySize
$objdisk=gwmi win32_logicaldisk -filter \"DriveType=3\" -computer .
$monobj=New-Object object
$monobj | add-member NoteProperty RAM -value $Qtram
$monobj | add-member NoteProperty Partitions -value $objdisk.DEviceID
$monobj | add-member NoteProperty Taille -value $objdisk.Size
$monobj | add-member NoteProperty EspaceLibre -value $objdisk.FreeSpace
$monobj | add-member NoteProperty NomServeur -value $objdisk.__Server
$monobj | Format-Table @{l=\"Nom\";e={$_.NomServeur}},
@{l=\"Volume\";e={$_.Partitions}},
@{l=\"Total (Mo)\";e={[math]::round($_.Taille/1MB«»)}},
@{l=\"Libre (Mo)\";e={[math]::round($_.EspaceLibre/1MB«»)}},
@{l=\"RAM (Go)\";e={[math]::round($Monobj.ram/1MB«»)}}

}[/code:1]
C'est possible non? J'ai pas de valeurs en sortie!

Merci beaucoup pour votre aide!

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

Plus d'informations
il y a 16 ans 4 mois #1329 par Jacques Barathon
Perso quand je teste ta fonction j'ai bien un affichage:

[code:1]
Nom Volume Total (Mo) Libre (Mo) RAM (Go)
---



0 0 2[/code:1]
Comme tu le vois, certains champs sont vides. La raison en est que j'ai plusieurs disques, donc $objdisk.__Server et $objdisk.partitions n'existent pas en tant que propriétés de $objdisk mais en tant que propriétés de chacun des éléments de $objdisk. Les autres propriétés Size et Freespace ont le même problème, mais comme ta fonction fait une opération mathématique avec ces propriétés quand elle les affecte au nouvel objet, j'hérite de la valeur 0 qui en résulte.

La façon de faire va dépendre de ce que tu veux faire du résultat. Quel type d'affichage veux-tu?

Janel

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

Temps de génération de la page : 0.073 secondes
Propulsé par Kunena