Question
Comparaison de 2 colonnes dans 2 fichiers csv
- PatriceLT
- Auteur du sujet
- Visiteur
-
il y a 9 ans 3 mois #23087
par PatriceLT
Comparaison de 2 colonnes dans 2 fichiers csv a été créé par PatriceLT
Bonjour à tous,
Après plusieurs semaines de recherches et, étant débutant, je me lance à poster ma problématique sur le forum.
Toutes mes demandes dans ce message concernent les GPOs.
Les fichiers seront mis en scheduler afin de générer des fichiers de logs.
Ce que j'ai pour l'instant :
- Fichier 1 (Référence) : C:\RapportGPO_$DATE.csv :
[code:1]
Import-Module ActiveDirectory
Import-Module GroupPolicy
$DATE = Get-Date -Format \"yyyy-MM-dd_HH-mm\"
# Test de la variable $DATE : OK #
$GPO = Get-GPO -All | select DomainName,DisplayName,@{Label=\"UserVersion\"; Expression = {$_.user.dsversion},@{Label=\"ComputerVersion\";Expression = {$_.computer.dsversion},CreationTime,ModificationTime,id | sort DisplayName
# Test de la variable $GPO : OK -> Toutes les gpos sont bien renvoyés avec leurs valeurs #
$GPO | Export-Csv C:\RapportGPO_$DATE.csv -Delimiter \",\" -NoTypeInformation
[/code:1]
Je précise, les valeurs que je dois comparer :
[int32] userVersion
[int32] computerVersion
Il s'agit donc de nombres de 0 à ... beaucoup.
- Fichier 2 (Généré tous les jours) : Il s'agit du même code que celui précédemment cité, sauf qu'il y aura des modifications au niveau de la date, et de la version (User,Computer) si les gpos sont modifiés.
- Fichier Comparaison : C'est là ou je bloque.
Ce que je recherche :
Comparaison du paramètre userVersion des 2 fichiers,
Si il est égale alors aucun fichier ne sera généré
Si il n'est pas égale, alors un fichier Comparaison sera généré avec le nom (displayname,DomainName...).
Je n'arrive donc pas à Comparer 2 colonnes (userVersion & computerVersion) des 2 fichiers csv.
Exemple :
Injection des entête :
\"DomainName\",\"DisplayName\",\"userVersion\",\"ComputerVersion\",\"CreationTime\",\"ModificationTime\",\"ID\"
Si la gpo a été modifié
Reference : \"test.lab\",\"Test-GPO\",\"0\",\"3\",\"date\",\"date\",\"guid\"
Fichier du 03/02/2017 a 15h00 :
\"test.lab\",\"Test-GPO\",\"0\",\"9\",\"date\",\"date\",\"guid\"
Cela voudra dire que la GPO \"Test-GPO\" sur le domaine \"test.lab\" aura été modifié avec la version 0,9 qui d'origine (userVersion & computerVersion) est a 0,3
Pourquoi faire cela ?
Actuellement certaines des GPOs sont modifiés sans que l'on soit au courant. C'est donc l'un des moyens de vérifier si toutes les GPOs misent en place sont comme nous les avons laissées, et qu'aucune personne ne les aient modifiées.
Ce que j'ai essayé, Compare-Object $Fichier $Fichier1 -IncludeEqual | Export-Csv C:\RapportGPOFinale.csv
Mais rien n'y fais.
Je suis donc bloqué. Merci aussi de me dire si pour la génération de mes différentes informations GPOs, je m'y suis bien pris.
En tout cas un petit Coucou au créateur du site ou son livre powershell v3 est vraiment excellent !
Petit plus c'est on va dire presque indispensable. Lors d'une génération manuelle (non par scheduler), il faut que celui que je génère devienne le fichier de référence qui sera comparé avec les fichiers générés par le scheduler.
Désolé si je suis un peu évasif dans mon explication.
Malheureusement je ne pourrai pas donner de fichier de sortie de test, car l'entreprise qui m'emploie est très restrictive.
Merci beaucoup à tout ceux qui pourront m'aider.
Message édité par: PatriceLT, à: 3/02/17 15:19
Message édité par: PatriceLT, à: 3/02/17 15:39<br><br>Message édité par: PatriceLT, à: 3/02/17 15:46
Après plusieurs semaines de recherches et, étant débutant, je me lance à poster ma problématique sur le forum.
Toutes mes demandes dans ce message concernent les GPOs.
Les fichiers seront mis en scheduler afin de générer des fichiers de logs.
Ce que j'ai pour l'instant :
- Fichier 1 (Référence) : C:\RapportGPO_$DATE.csv :
[code:1]
Import-Module ActiveDirectory
Import-Module GroupPolicy
$DATE = Get-Date -Format \"yyyy-MM-dd_HH-mm\"
# Test de la variable $DATE : OK #
$GPO = Get-GPO -All | select DomainName,DisplayName,@{Label=\"UserVersion\"; Expression = {$_.user.dsversion},@{Label=\"ComputerVersion\";Expression = {$_.computer.dsversion},CreationTime,ModificationTime,id | sort DisplayName
# Test de la variable $GPO : OK -> Toutes les gpos sont bien renvoyés avec leurs valeurs #
$GPO | Export-Csv C:\RapportGPO_$DATE.csv -Delimiter \",\" -NoTypeInformation
[/code:1]
Je précise, les valeurs que je dois comparer :
[int32] userVersion
[int32] computerVersion
Il s'agit donc de nombres de 0 à ... beaucoup.
- Fichier 2 (Généré tous les jours) : Il s'agit du même code que celui précédemment cité, sauf qu'il y aura des modifications au niveau de la date, et de la version (User,Computer) si les gpos sont modifiés.
- Fichier Comparaison : C'est là ou je bloque.
Ce que je recherche :
Comparaison du paramètre userVersion des 2 fichiers,
Si il est égale alors aucun fichier ne sera généré
Si il n'est pas égale, alors un fichier Comparaison sera généré avec le nom (displayname,DomainName...).
Je n'arrive donc pas à Comparer 2 colonnes (userVersion & computerVersion) des 2 fichiers csv.
Exemple :
Injection des entête :
\"DomainName\",\"DisplayName\",\"userVersion\",\"ComputerVersion\",\"CreationTime\",\"ModificationTime\",\"ID\"
Si la gpo a été modifié
Reference : \"test.lab\",\"Test-GPO\",\"0\",\"3\",\"date\",\"date\",\"guid\"
Fichier du 03/02/2017 a 15h00 :
\"test.lab\",\"Test-GPO\",\"0\",\"9\",\"date\",\"date\",\"guid\"
Cela voudra dire que la GPO \"Test-GPO\" sur le domaine \"test.lab\" aura été modifié avec la version 0,9 qui d'origine (userVersion & computerVersion) est a 0,3
Pourquoi faire cela ?
Actuellement certaines des GPOs sont modifiés sans que l'on soit au courant. C'est donc l'un des moyens de vérifier si toutes les GPOs misent en place sont comme nous les avons laissées, et qu'aucune personne ne les aient modifiées.
Ce que j'ai essayé, Compare-Object $Fichier $Fichier1 -IncludeEqual | Export-Csv C:\RapportGPOFinale.csv
Mais rien n'y fais.
Je suis donc bloqué. Merci aussi de me dire si pour la génération de mes différentes informations GPOs, je m'y suis bien pris.
En tout cas un petit Coucou au créateur du site ou son livre powershell v3 est vraiment excellent !
Petit plus c'est on va dire presque indispensable. Lors d'une génération manuelle (non par scheduler), il faut que celui que je génère devienne le fichier de référence qui sera comparé avec les fichiers générés par le scheduler.
Désolé si je suis un peu évasif dans mon explication.
Malheureusement je ne pourrai pas donner de fichier de sortie de test, car l'entreprise qui m'emploie est très restrictive.
Merci beaucoup à tout ceux qui pourront m'aider.
Message édité par: PatriceLT, à: 3/02/17 15:19
Message édité par: PatriceLT, à: 3/02/17 15:39<br><br>Message édité par: PatriceLT, à: 3/02/17 15:46
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 9 ans 3 mois #23089
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
Salut,
j'ai lu rapido ton poste, ceci me laisse perplexe :
[code:1]
Compare-Object $Fichier $Fichier1
[/code:1]
Le nom du cmdlet c'est Compare-Object par Compare-File.
Il te faut 2 collections d'objets et préciser -Property.
Sur cette partie, tu trouveras des exemples sur le forum.
As-tu étudié une autre approche basée event ?<br><br>Message édité par: Laurent Dardenne, à: 3/02/17 15:50
j'ai lu rapido ton poste, ceci me laisse perplexe :
[code:1]
Compare-Object $Fichier $Fichier1
[/code:1]
Le nom du cmdlet c'est Compare-Object par Compare-File.
Il te faut 2 collections d'objets et préciser -Property.
Sur cette partie, tu trouveras des exemples sur le forum.
As-tu étudié une autre approche basée event ?<br><br>Message édité par: Laurent Dardenne, à: 3/02/17 15:50
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- PatriceLT
- Auteur du sujet
- Visiteur
-
il y a 9 ans 3 mois #23090
par PatriceLT
Réponse de PatriceLT sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
Pardon Laurent, j'ai effectivement fait compare-object non compare-file.
En ce qui concerne ton lien, ça ne répond pas à l'objectif de mon script.
Pour informations, j'ai des 100aines de GPO par domaines, et je dois justement faire ce script afin de déceler toute modification sur les gpos de tous les domaines.
Compare-Object $Fichier1 $Fichier2 -Property \"userVersion\"
Est-ce bien ce que tu voulais dire ?
J'ai malheureusement 2 choses à comparer dans mon résultat de commande :
- userVersion = Fichier1 & userVersion = Fichier2 -> Si différent alors ajouter le nom de la gpo et toutes les informations qui lui sont attachés, dans mon fichier Final.
- computerVersion = Fichier & computerVersion = Fichier1 -> Si différent alors ajouter le nom de la gpo avec ces informations dans ce fichier Final.
Désolé si je ne suis pas très clair dans mes explications, ou alors je n'ai pas compris ta réponse (je débute dans powershell).
EDIT : Je viens de réessayer un Compare-Object $Fichier $Fichier1 -Property \"ComputerVersion\" | Export-Csv C:\RapportGPOFinal.csv
Mais rien ne sort.
Message édité par: PatriceLT, à: 3/02/17 16:03<br><br>Message édité par: PatriceLT, à: 3/02/17 16:06
En ce qui concerne ton lien, ça ne répond pas à l'objectif de mon script.
Pour informations, j'ai des 100aines de GPO par domaines, et je dois justement faire ce script afin de déceler toute modification sur les gpos de tous les domaines.
Compare-Object $Fichier1 $Fichier2 -Property \"userVersion\"
Est-ce bien ce que tu voulais dire ?
J'ai malheureusement 2 choses à comparer dans mon résultat de commande :
- userVersion = Fichier1 & userVersion = Fichier2 -> Si différent alors ajouter le nom de la gpo et toutes les informations qui lui sont attachés, dans mon fichier Final.
- computerVersion = Fichier & computerVersion = Fichier1 -> Si différent alors ajouter le nom de la gpo avec ces informations dans ce fichier Final.
Désolé si je ne suis pas très clair dans mes explications, ou alors je n'ai pas compris ta réponse (je débute dans powershell).
EDIT : Je viens de réessayer un Compare-Object $Fichier $Fichier1 -Property \"ComputerVersion\" | Export-Csv C:\RapportGPOFinal.csv
Mais rien ne sort.
Message édité par: PatriceLT, à: 3/02/17 16:03<br><br>Message édité par: PatriceLT, à: 3/02/17 16:06
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 9 ans 3 mois #23091
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
PatriceLT écrit:
, il faut utiliser des listes d'objets.
PatriceLT écrit:
Pour les fichiers de test tu mets \"toto,GPO1,01/12/2016\" ce qui suffit pour tester. On compare des dates et des strings.
On ira plus vite pour t'aider en sachant d'où tu parts et où tu veux arriver
Compare-File n'existe pasPardon Laurent, j'ai effectivement fait compare-object non compare-file.
PatriceLT écrit:
Ok.En ce qui concerne ton lien, ça ne répond pas à l'objectif de mon script.
Pour les fichiers de test tu mets \"toto,GPO1,01/12/2016\" ce qui suffit pour tester. On compare des dates et des strings.
On ira plus vite pour t'aider en sachant d'où tu parts et où tu veux arriver
Tutoriels PowerShell
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 9 ans 3 mois #23092
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
PatriceLT écrit:
Il s'agit d'une clé composite ou de deux tests distincts ?J'ai malheureusement 2 choses à comparer dans mon résultat de commande :
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 3 mois #23093
par Philippe
Réponse de Philippe sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
salut
vu que j'ai des gpo sous la main j'ai fait un test avec compare, et pas de probleme
le code que j'ai utilisé :
[code:1]
$DATE = Get-Date -Format \"2016-12-31_23-30\"
$gporef = Import-Csv \"C:\Rapport\GPO_2016-12-31_23-30.csv\" -Delimiter \",\"
$gpo2 = Import-Csv \"C:\Rapport\GPO_2017-01-31_23-30.csv\" -Delimiter \",\"
Compare-Object -ReferenceObject $gporef -DifferenceObject $gpo2 -Property UserVersion, ComputerVersion -PassThru | where {$_.SideIndicator -eq \"=>\"} | select * -ExcludeProperty SideIndicator |
export-csv \"C:\Rapport\GPO_diff_$DATE.csv\" -Delimiter \",\" -NoTypeInformation
[/code:1]
Message édité par: 6ratgus, à: 3/02/17 16:27<br><br>Message édité par: 6ratgus, à: 3/02/17 16:40
vu que j'ai des gpo sous la main j'ai fait un test avec compare, et pas de probleme
le code que j'ai utilisé :
[code:1]
$DATE = Get-Date -Format \"2016-12-31_23-30\"
$gporef = Import-Csv \"C:\Rapport\GPO_2016-12-31_23-30.csv\" -Delimiter \",\"
$gpo2 = Import-Csv \"C:\Rapport\GPO_2017-01-31_23-30.csv\" -Delimiter \",\"
Compare-Object -ReferenceObject $gporef -DifferenceObject $gpo2 -Property UserVersion, ComputerVersion -PassThru | where {$_.SideIndicator -eq \"=>\"} | select * -ExcludeProperty SideIndicator |
export-csv \"C:\Rapport\GPO_diff_$DATE.csv\" -Delimiter \",\" -NoTypeInformation
[/code:1]
Message édité par: 6ratgus, à: 3/02/17 16:27<br><br>Message édité par: 6ratgus, à: 3/02/17 16:40
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.048 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Comparaison de 2 colonnes dans 2 fichiers csv