Question Script audit ressource parc (Résolu)

Plus d'informations
il y a 16 ans 4 mois #1303 par bordin
Bonjour à tous!
De nouveau parmis vous!

Je voudrais faire un audit rapide de mon parc (espace disque, ram)
Bon je sais le faire pour l'espace disque, ainsi que pour la RAM.
Mon souci c'est de présenter les résultats à la console:
Nom PC, Partition, Total dique, Total libre, Total RAM

j'aimerai faire çà en une seule passe sans exécuter 2 scripts différents.

J'ai testé comme çà dans un 1er temps:
[code:1]get-content $args[0] | foreach {
$ram=gwmi Win32_LogicalMemoryConfiguration -computer $_
gwmi win32_logicaldisk -filter \"DriveType=3\" -computer $_} | sort-object -property $_.__Server -descending |
format-table
@{l=\"Nom\";e={$_.__Server}},
@{l=\"Volume\";e={$_.DeviceId}},
@{l=\"Total (Mo)\";e={[math]::round($_.Size/1MB«»)}},
@{l=\"Libre (Mo)\";e={[math]::round($_.FreeSpace/1MB«»)}},
@{l=\"RAM ()\";e={$ram.TotalPhysicalMemory}}
[/code:1]
Merci!
PS: çà fait un baille, faut que je me remette au cripting!!!:blush:<br><br>Message édité par: Arnaud, à: 30/11/07 09:54

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

Plus d'informations
il y a 16 ans 4 mois #1304 par bordin
Réponse de bordin sur le sujet Re:Script audit ressource parc
Re,
:whistle:
Désolé, mais je crois avoir posté trop vite!
[code:1]get-content $args[0] | foreach {
$ram=gwmi Win32_LogicalMemoryConfiguration -computername $_
gwmi win32_logicaldisk -filter \&quot;DriveType=3\&quot; -computer $_} |
format-table @{l=\&quot;Nom\&quot;;e={$_.__Server}},
@{l=\&quot;Volume\&quot;;e={$_.DeviceId}},
@{l=\&quot;Total (Mo)\&quot;;e={[math]::round($_.Size/1MB«»)}},
@{l=\&quot;Libre (Mo)\&quot;;e={[math]::round($_.FreeSpace/1MB«»)}},
@{l=\&quot;RAM ()\&quot;;e={[math]::round($ram.TotalPhysicalMemory)}}[/code:1]

C'est mieux avec çà! :blush:

A+

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

Plus d'informations
il y a 16 ans 4 mois #1305 par Jacques Barathon
Ta deuxième version marche sans doute mieux, mais elle n'est pas super solide car tu l'as remarqué, tu ne peux pas faire de tri avant l'affichage. En fait, ta solution repose sur le fait que les objets sont passés un par un dans le pipeline et qu'ils sont traités immédiatement par la commande suivante. Je m'explique...

Dans la boucle foreach, tu affectes à la variable $ram le contenu de la classe Win32_LogicalMemoryConfiguration. Dans le même temps, tu émets un objet Win32_LogicalDisk.

L'object émis est transmis par le pipeline à la commande suivante (format-table). Cette commande utilise les propriétés de l'objet émis, ainsi que des propriétés de la variable $ram. Or, celle-ci va changer au passage suivant dans la boucle. L'affichage n'est donc cohérent que s'il y a correspondance \&quot;temporelle\&quot; entre la dernière affectation à la variable $ram et le dernier objet émis.

Dans le cas où tu insères un sort-object entre la boucle et l'affichage, les objets émis sont rebrassés pour être triés comme demandé. Entre temps, la variable $ram a été écrasée plusieurs fois, et quand les objets triés sont finalement émis par sort-object pour être affichés par format-table, l'état de la variable $ram est totalement imprévisible (à priori, si le temps de traitement de foreach n'est pas trop long, tu récupères alors la $ram du dernier passage dans la boucle).

Ta technique est donc une source potentielle d'ennui, même si elle peut marcher dans ton bout de script. Il existe de nombreuses alternatives possibles, comme l'utilisation d'un tableau associatif, ou l'ajout de propriétés via add-member. C'est cette dernière technique que je vais illustrer ici:

[code:1]
get-content $args[0] | foreach {
$ram = (gwmi Win32_OperatingSystem -computername $_).TotalVisibleMemorySize
$disks = gwmi win32_logicaldisk -filter \&quot;DriveType=3\&quot; -computername $_
$disks | add-member NoteProperty RAM $ram
$disks
} |
format-table @{l=\&quot;Nom\&quot;;e={$_.__Server}},
@{l=\&quot;Volume\&quot;;e={$_.DeviceId}},
@{l=\&quot;Total (Mo)\&quot;;e={[math]::round($_.Size/1MB«»)}},
@{l=\&quot;Libre (Mo)\&quot;;e={[math]::round($_.FreeSpace/1MB«»)}},
@{l=\&quot;RAM ()\&quot;;e={[math]::round($_.RAM)}}
[/code:1]
Cette construction te permet d'insérer un tri, ou toute autre opération nécessaire entre la requête WMI et l'affichage.

Au passage, tu noteras que j'ai remplacé Win32_LogicalMemoryConfiguration par Win32_OperatingSystem (avec la propriété TotalVisibleMemorySize). En effet, la classe Win32_LogicalMemoryConfiguration n'est plus supportée sur les versions récentes de Windows. Elle n'existe d'ailleurs plus dans Windows Vista.

Janel<br><br>Message édité par: janel, à: 29/11/07 09:12

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

Plus d'informations
il y a 16 ans 4 mois #1307 par bordin
Réponse de bordin sur le sujet Re:Script audit ressource parc
Salut,
Merci beaucoup Janel pour ce petit cours!

C'est ce que je cherchais: l'ajout d'une propriété à un objet par add-member.

Merci, je vais corriger mon script.

A+

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

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