Question Comparaison de 2 colonnes dans 2 fichiers csv

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • 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

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

Plus d'informations
il y a 9 ans 3 mois #23089 par xyz
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

Tutoriels PowerShell

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

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • 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 \&quot;userVersion\&quot;

Est-ce bien ce que tu voulais dire ?

J'ai malheureusement 2 choses à comparer dans mon résultat de commande :

- userVersion = Fichier1 &amp; userVersion = Fichier2 -&gt; 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 &amp; computerVersion = Fichier1 -&gt; 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 \&quot;ComputerVersion\&quot; | 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.

Plus d'informations
il y a 9 ans 3 mois #23091 par xyz
PatriceLT écrit:

Pardon Laurent, j'ai effectivement fait compare-object non compare-file.

Compare-File n'existe pas :-), il faut utiliser des listes d'objets.
PatriceLT écrit:

En ce qui concerne ton lien, ça ne répond pas à l'objectif de mon script.

Ok.
Pour les fichiers de test tu mets \&quot;toto,GPO1,01/12/2016\&quot; 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.

Plus d'informations
il y a 9 ans 3 mois #23092 par xyz
PatriceLT écrit:

J'ai malheureusement 2 choses à comparer dans mon résultat de commande :

Il s'agit d'une clé composite ou de deux tests distincts ?

Tutoriels PowerShell

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

Plus d'informations
il y a 9 ans 3 mois #23093 par Philippe
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 \&quot;2016-12-31_23-30\&quot;

$gporef = Import-Csv \&quot;C:\Rapport\GPO_2016-12-31_23-30.csv\&quot; -Delimiter \&quot;,\&quot;
$gpo2 = Import-Csv \&quot;C:\Rapport\GPO_2017-01-31_23-30.csv\&quot; -Delimiter \&quot;,\&quot;

Compare-Object -ReferenceObject $gporef -DifferenceObject $gpo2 -Property UserVersion, ComputerVersion -PassThru | where {$_.SideIndicator -eq \&quot;=&gt;\&quot;} | select * -ExcludeProperty SideIndicator |
export-csv \&quot;C:\Rapport\GPO_diff_$DATE.csv\&quot; -Delimiter \&quot;,\&quot; -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.047 secondes
Propulsé par Kunena