Question
Xml, Texte ou Tableau ?
- Van_De
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 59
- Remerciements reçus 0
il y a 15 ans 4 mois #8474
par Van_De
Xml, Texte ou Tableau ? a été créé par Van_De
Tout est dans le titre 
Donc je m'explique, il faut que je fasse un fichier dans lequel j'inscris le nom des Machines virtuelles que j'ai récupéré par mon script (Ainsi que la date de leur dernière sauvegarde) ! Je dois ensuite pouvoir lire ce fichier et utiliser les noms des VM pour d'autres commandes dans mon script !
Ainsi que pour un tout autre script qui devras récupérer des informations dans ce fichier !
Donc voila je m'interrogeais sur quel type de fichier serais le plus pratique ou le plus simple ou tout simplement lequel me permet de faire cela ?!
Merci d'avance
Van_De
Donc je m'explique, il faut que je fasse un fichier dans lequel j'inscris le nom des Machines virtuelles que j'ai récupéré par mon script (Ainsi que la date de leur dernière sauvegarde) ! Je dois ensuite pouvoir lire ce fichier et utiliser les noms des VM pour d'autres commandes dans mon script !
Ainsi que pour un tout autre script qui devras récupérer des informations dans ce fichier !
Donc voila je m'interrogeais sur quel type de fichier serais le plus pratique ou le plus simple ou tout simplement lequel me permet de faire cela ?!
Merci d'avance
Van_De
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 15 ans 4 mois #8476
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Xml, Texte ou Tableau ?
Salut,
un fichier csv peut suffire. Le xml supporterait mieux une évolution de ta structure.
Si lors de ton traitement tu construis une liste d'objet, tu pourras modifier à la demande le type d'export/import:
export-csv, export-cliXML,...
un fichier csv peut suffire. Le xml supporterait mieux une évolution de ta structure.
Si lors de ton traitement tu construis une liste d'objet, tu pourras modifier à la demande le type d'export/import:
export-csv, export-cliXML,...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Van_De
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 59
- Remerciements reçus 0
il y a 15 ans 4 mois #8477
par Van_De
Réponse de Van_De sur le sujet Re:Xml, Texte ou Tableau ?
Ok merci de l'info 
Mais comment manipuler le csv avec Powershell ??
Je débute en powershell !
Mais comment manipuler le csv avec Powershell ??
Je débute en powershell !
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 4 mois #8479
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Xml, Texte ou Tableau ?
La création d'un fichier CSV suppose (pour faire vite) que tes données sont structurées dans un tableau.
Le moins évident à appréhender c'est la conversion d'une série de données disparates (dans des variables distinctes) en un seul tableau.
Voici un exemple qui énumère les fichiers du répertoire courant, stocke leur nom et date de création dans un tableau, et sauvegarde ce tableau au format CSV. Ca n'a d'intérêt que pour illustrer la création d'un tableau, parce qu'en l'occurrence on pourrait directement exploiter le tableau retourné par la commande dir...
[code:1]
# initialisation du tableau $fichiers :
$fichiers = @()
# énumération des fichiers du répertoire courant un par un :
dir | where {!$_.psiscontainer} | foreach {
# création d'un objet $fichier
# (coquille vide dans un premier temps) :
$fichier = new-object PSObject
# ajout à l'objet $fichier d'une propriété Nom,
# qui prend le Name du fichier :
$fichier | add-member NoteProperty Nom $_.name
# ajout à l'objet $fichier d'une propriété Creation,
# qui prend le CreationTime du fichier :
$fichier | add-member NoteProperty Creation $_.CreationTime
# ajout de l'objet $fichier au tableau $fichiers :
$fichiers += $fichier
}
# export de $fichiers au format CSV dans fichiers.csv :
$fichiers | export-csv fichiers.csv -UseCulture -NoTypeInformation
[/code:1]
Et voilà.
Petites précisions sur les paramètres de la commande export-csv :
-UseCulture
Par défaut, les commandes d'import/export CSV utilisent la virgule pour séparer les champs. C'est pratique pour échanger des données avec des collègues du monde entier, par contre ce n'est pas pratique pour échanger des données avec Excel ou tout autre logiciel qui utilise les réglages des paramètre régionaux du poste.
En effet, sur un poste français le séparateur de champs est le point-virgule. En précisant -useculture, c'est le point-virgule qui sera utilisé. A la place, tu peux aussi utiliser -delimiter et lui passer \";\" en dur.
-NoTypeInformation
Par défaut, export-csv ajoute une ligne en tête du fichier qui indique le type des données sauvegardées. L'intérêt est assez limité, à réserver aux cas où on exporte des objets PowerShell dont on aura besoin de récupérer le type de base en même temps qu'on réimporte les données avec import-csv.
Hormis ces cas très rares (dans ma pratique en tout cas) on évitera d'avoir cette ligne qui vient \"polluer\" l'import du fichier dans d'autres logiciels.
Tu peux ensuite récupérer ton fichier très facilement :
[code:1]
PS> $fichiers = import-csv fichiers.csv -UseCulture
PS> $fichiers
Nom Creation
---
adresseIP.csv 29/12/2010 13:17:15
boot.ini.lnk 17/12/2010 15:14:21
export_ipnetbios.csv 29/12/2010 13:22:37
gpresult.txt 28/12/2010 16:20:55
notepad.exe.lnk 17/12/2010 15:17:59
win.txt 28/12/2010 10:34:51
[/code:1]
Le moins évident à appréhender c'est la conversion d'une série de données disparates (dans des variables distinctes) en un seul tableau.
Voici un exemple qui énumère les fichiers du répertoire courant, stocke leur nom et date de création dans un tableau, et sauvegarde ce tableau au format CSV. Ca n'a d'intérêt que pour illustrer la création d'un tableau, parce qu'en l'occurrence on pourrait directement exploiter le tableau retourné par la commande dir...
[code:1]
# initialisation du tableau $fichiers :
$fichiers = @()
# énumération des fichiers du répertoire courant un par un :
dir | where {!$_.psiscontainer} | foreach {
# création d'un objet $fichier
# (coquille vide dans un premier temps) :
$fichier = new-object PSObject
# ajout à l'objet $fichier d'une propriété Nom,
# qui prend le Name du fichier :
$fichier | add-member NoteProperty Nom $_.name
# ajout à l'objet $fichier d'une propriété Creation,
# qui prend le CreationTime du fichier :
$fichier | add-member NoteProperty Creation $_.CreationTime
# ajout de l'objet $fichier au tableau $fichiers :
$fichiers += $fichier
}
# export de $fichiers au format CSV dans fichiers.csv :
$fichiers | export-csv fichiers.csv -UseCulture -NoTypeInformation
[/code:1]
Et voilà.
Petites précisions sur les paramètres de la commande export-csv :
-UseCulture
Par défaut, les commandes d'import/export CSV utilisent la virgule pour séparer les champs. C'est pratique pour échanger des données avec des collègues du monde entier, par contre ce n'est pas pratique pour échanger des données avec Excel ou tout autre logiciel qui utilise les réglages des paramètre régionaux du poste.
En effet, sur un poste français le séparateur de champs est le point-virgule. En précisant -useculture, c'est le point-virgule qui sera utilisé. A la place, tu peux aussi utiliser -delimiter et lui passer \";\" en dur.
-NoTypeInformation
Par défaut, export-csv ajoute une ligne en tête du fichier qui indique le type des données sauvegardées. L'intérêt est assez limité, à réserver aux cas où on exporte des objets PowerShell dont on aura besoin de récupérer le type de base en même temps qu'on réimporte les données avec import-csv.
Hormis ces cas très rares (dans ma pratique en tout cas) on évitera d'avoir cette ligne qui vient \"polluer\" l'import du fichier dans d'autres logiciels.
Tu peux ensuite récupérer ton fichier très facilement :
[code:1]
PS> $fichiers = import-csv fichiers.csv -UseCulture
PS> $fichiers
Nom Creation
---
adresseIP.csv 29/12/2010 13:17:15
boot.ini.lnk 17/12/2010 15:14:21
export_ipnetbios.csv 29/12/2010 13:22:37
gpresult.txt 28/12/2010 16:20:55
notepad.exe.lnk 17/12/2010 15:17:59
win.txt 28/12/2010 10:34:51
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 15 ans 4 mois #8480
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Xml, Texte ou Tableau ?
Concernant la création d'objet synthétique, je vous propose une amélioration :
[code:1]
$Fichiers=@(
Dir |
where {-not $_.PSisContainer} |
Foreach {
new-object PSObject -Property @{ Nom=$_.name;Creation=$_.CreationTime }
}
)[/code:1]
Avec la construction @(...) on s'assure de construire un tableau, et à partir de la v2 le cmdlet New-Object propose le paramètre -Property qui permet de s'affranchir, dans une certaine mesure, de l'usage/compréhension du cmdlet Add-Member.
Mais je reconnais que l'usage de Add-Member attise la curiosité .
[code:1]
$Fichiers=@(
Dir |
where {-not $_.PSisContainer} |
Foreach {
new-object PSObject -Property @{ Nom=$_.name;Creation=$_.CreationTime }
}
)[/code:1]
Avec la construction @(...) on s'assure de construire un tableau, et à partir de la v2 le cmdlet New-Object propose le paramètre -Property qui permet de s'affranchir, dans une certaine mesure, de l'usage/compréhension du cmdlet Add-Member.
Mais je reconnais que l'usage de Add-Member attise la curiosité .
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Van_De
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 59
- Remerciements reçus 0
il y a 15 ans 4 mois #8483
par Van_De
Réponse de Van_De sur le sujet Re:Xml, Texte ou Tableau ?
Merci pour vos réponses je commence à y voir plus claire
J'ai réussi à reprendre le script de Janel et à le modifier à ma façon afin de faire certains tests
!
J'aimerais savoir comment avoir la liste des propriétés que l'on peut avoir besoin entre autres la date de dernière modification
Et j'essaye d'adapter ce script par contre avec ma liste de VM que j'ai dans une variable déja et lorsqu'il écris dans le fichier csv, j'ai bien les 3 cases correspondant au VM mais elles sont vides ! Si j'ai bien compris c'est la propriété name qui ne correspond pas ?? Quel serait la commande pour ?? Je mets la partie du script qui fait sa
[code:1]$ListofVMs = Get-WmiObject -namespace root\virtualization Msvm_ComputerSystem -filter \"Description <> `\"Microsoft Hosting Computer System`\"\"
$Vmlist = $ListofVMs | % {$_.ElementName}
$fichiers = @()
$Vmlist | foreach {
$fichier = New-Object PSObject
$fichier | Add-Member NoteProperty Nom $_.name
$fichiers += $fichier
}
$fichiers | Export-Csv fichiers.csv -UseCulture -NoTypeInformation
[/code:1]
EDIT :
J'ai réussi à obtenir ce que je voulais en modifiant le code comme ceci :
[code:1]$ListofVMs = Get-WmiObject -namespace root\virtualization Msvm_ComputerSystem -filter \"Description <> `\"Microsoft Hosting Computer System`\"\"
$fichiers = @()
$ListofVMs | foreach {
$fichier = New-Object PSObject
$fichier | Add-Member NoteProperty Nom $_.ElementName
$fichiers += $fichier
}
$fichiers | Export-Csv fichiers.csv -UseCulture -NoTypeInformation
[/code:1]
Maintenant je voudrais pouvoir récupérer les données stocker dans ce fichier csv afin de créer des dossiers au noms des VM qu'il a récupéré !! Et la :/<br><br>Message édité par: Van_De, à: 31/12/10 11:13
J'aimerais savoir comment avoir la liste des propriétés que l'on peut avoir besoin entre autres la date de dernière modification
Et j'essaye d'adapter ce script par contre avec ma liste de VM que j'ai dans une variable déja et lorsqu'il écris dans le fichier csv, j'ai bien les 3 cases correspondant au VM mais elles sont vides ! Si j'ai bien compris c'est la propriété name qui ne correspond pas ?? Quel serait la commande pour ?? Je mets la partie du script qui fait sa
[code:1]$ListofVMs = Get-WmiObject -namespace root\virtualization Msvm_ComputerSystem -filter \"Description <> `\"Microsoft Hosting Computer System`\"\"
$Vmlist = $ListofVMs | % {$_.ElementName}
$fichiers = @()
$Vmlist | foreach {
$fichier = New-Object PSObject
$fichier | Add-Member NoteProperty Nom $_.name
$fichiers += $fichier
}
$fichiers | Export-Csv fichiers.csv -UseCulture -NoTypeInformation
[/code:1]
EDIT :
J'ai réussi à obtenir ce que je voulais en modifiant le code comme ceci :
[code:1]$ListofVMs = Get-WmiObject -namespace root\virtualization Msvm_ComputerSystem -filter \"Description <> `\"Microsoft Hosting Computer System`\"\"
$fichiers = @()
$ListofVMs | foreach {
$fichier = New-Object PSObject
$fichier | Add-Member NoteProperty Nom $_.ElementName
$fichiers += $fichier
}
$fichiers | Export-Csv fichiers.csv -UseCulture -NoTypeInformation
[/code:1]
Maintenant je voudrais pouvoir récupérer les données stocker dans ce fichier csv afin de créer des dossiers au noms des VM qu'il a récupéré !! Et la :/<br><br>Message édité par: Van_De, à: 31/12/10 11:13
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.043 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Xml, Texte ou Tableau ?