Question
Hash Table - Soigner la présentation (Résolu)
- michault
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 128
- Remerciements reçus 0
J'essaye de soigner la présentation de ma sortie sur un ancien script inspiré de ce que j'ai trouvé ici.
Les entêtes sont répétées sur chaque ligne.
[code:1]#GetfreespaceList.ps1
# Paramètres: $ouparm :L'Unité d'Organisation dont on veut récupérer les ordinateurs.
# $who : Quels PC exemple PC*
# $file : Fichier de sortie
# $log : Fichier error
Param($ouparm , $who, $file, $log)
#Définition des constantes
$domain = \",DC=domain,DC=fr\"
#$ErrorActionPreference = 'SilentlyContinue'
$OU= $ouparm + $domain
get-QADComputer -searchRoot $OU | Select-Object Name | where {$_.Name -like $who} |
ForEach-Object {
# Sortie fichier sous forme de table
Get-WmiObject -ComputerName $_.Name -Class Win32_LogicalDisk -ErrorAction SilentlyContinue -ErrorVariable wmierror|where {$_.DriveType -eq 3}| tee-object -Variable disques | select-object @{e={$_.systemname};n=\"Système\"} ,
@{e={$_.name};n=\"Disque\"} , @{e={[Math]::Round($_.size/1GB,1)}; n=\"Taille (Go)\"},
@{e={[Math]::Round($_.freespace/1GB,1)}; n=\"Disponible (Go)\"},@{e={[math]::round(([int64]$_.size-[int64]$_.freespace)/1GB,1)};n=\"Occupé (Go)\"},
@{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n=\"% restant\"} | Format-table | Out-File $file -Append -NoClobber
}[/code:1]
Je voudrai alimenter une hashtable pour avoir un fichier propre avec les entêtes une seule fois, mais n'arrive pas à alimenter cette table.
[code:1]#GetfreespaceList.ps1
# Paramètres: $ouparm :L'Unité d'Organisation dont on veut récupérer les ordinateurs.
# $who : Quels PC exemple PC*
# $file : Fichier de sortie
# $log : Fichier error
Param($ouparm , $who, $file, $log)
#Définition des constantes
$domain = \",DC=domaine,DC=fr\"
#$ErrorActionPreference = 'SilentlyContinue'
$OU= $ouparm + $domain
get-QADComputer -searchRoot $OU | Select-Object Name | where {$_.Name -like $who} |
ForEach-Object {
# Sortie fichier sous forme de table
$Objet = Get-WmiObject -ComputerName $_.Name -Class Win32_LogicalDisk -ErrorAction SilentlyContinue -ErrorVariable wmierror|where {$_.DriveType -eq 3}| tee-object -Variable disques | select-object @{e={$_.systemname};n=\"Système\"} ,
@{e={$_.name};n=\"Disque\"} , @{e={[Math]::Round($_.size/1GB,1)}; n=\"Taille (Go)\"},
@{e={[Math]::Round($_.freespace/1GB,1)}; n=\"Disponible (Go)\"},@{e={[math]::round(([int64]$_.size-[int64]$_.freespace)/1GB,1)};n=\"Occupé (Go)\"},
@{e={[math]::round(([int64]$_.freespace/[int64]$_.size*100),0)};n=\"% restant\"}
Write-Host $Objet
}[/code:1]
Voilà où j'en suis. La variable $Objet contient:
@{Système=PCXXXX; Disque=C:; Taille (Go)=74,5; Disponible (Go)=64; Occupé (Go)=10,4; % restant=86}
Je voudrai me débarrasser des labels et les reprendre au moment du chargement de la table.
C'est encore un peu costaud pour moi<br><br>Message édité par: Arnaud, à: 9/12/08 23:37
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
chm69 écrit:Je voudrai alimenter une hashtable pour avoir un fichier propre avec les entêtes une seule fois
Je ne comprends pas ce que tu veux faire, tu veux enregistrer sur disque le contenu d'une hashtable ?Je voudrai me débarrasser des labels et les reprendre au moment du chargement de la table.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- michault
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 128
- Remerciements reçus 0
Disque Taille Disponible (Go) Occupé (Go) %restant
C: 100 70 10 70,00
Disque Taille Disponible (Go) Occupé (Go) %restant
C: 240 80 160 30,00
ETC....
Je voudrai
Disque Taille Disponible (Go) Occupé (Go) %restant
C: 100 70 10 70,00
C: 240 80 160 30,00
voir
Disque;Taille;Disponible (Go);Occupé (Go);%restant
C:;100;70;10;70,00
C:;240;80;160;30,00
voilà mais je sais pas faire
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
A prioris c'est simplevoilà mais je sais pas faire
[code:1]
$objet|export-csv test.csv -encoding UTF8
[/code:1]
Il ne faut pas oublié que PS est basé objet et pas chaîne de caractères.
On doit, si possible, récupérer une collection d'objets et ne pas lier les traitements et la présentation (l'affichage) sauf les warning ou les logs.
Si je peux me permettre une remarque, tes scripts devraient renvoyer des objets et pas du texte, ils pourront ainsi s'insérer aisément dans des segments de pipeline. A mon avis le pb n'est pas que tu ne saches pas faire c'est plutôt que ta manière de faire ne peut que t'ammener ce genre de pb.
Il faut arriver à penser pipeline et objet mais pour ça faut changer les habitudes, pas facile...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- michault
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 128
- Remerciements reçus 0
Un mixte des 2 c'est pas possible:( ???
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Si tu n'as pas suivi mon conseil c'est normal, procéde ainsi :J'ai un problème avec l'export-csv qui écrase le fichier résultant plutôt que d'ajouter le nouvel objet issu de get-wmiobject.
[code:1]
$Objets=get-QADComputer ..
[/code:1]
Ensuite si tu appelles ce script au sein d'une boucle cela ne marchera pas plus. Dans ce cas la construction de ta liste d'objet doit se faire dans le script appellant
chm69 écrit:
Je ne pense pas. Il manque la fonctionnalité Append mais si l'équipe de dev de PS ne l'a pas ajouté c'est qu'il avait une bonne raison, la V2 n'offre pas plus de fonction.Un mixte des 2 c'est pas possible
Reste le bricolage de ce type là :
[code:1]
$First=test-path test.csv
if ($First)
{$Old= gc test.csv
$objet|export-csv test.csv -encoding UTF8 -noTypeInformation
$new= gc test.csv
$old,$new[1..($new.count-1)]|Set-content test.csv
}
else {$objet|export-csv test.csv -encoding UTF8}
[/code:1]
Mais pour moi,ici tout indique que ta conception est à revoir. En procédant ainsi on ne régle pas le problème, on s'y adapte
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Hash Table - Soigner la présentation (Résolu)