Question Comparaison avancée de 2 fichiers

  • Spama
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 13 ans 7 mois #12776 par Spama
Réponse de Spama sur le sujet Re:Comparaison avancée de 2 fichiers
Bonjour,

merci de votre réponse.
Au début je me suis orienté Macro car à la base ce sont 2 fichiers excel. Mais vu mon niveau en VB ce n'étaiyt même pas la peine que je continue sur cette voir, trop grosse perte de temps du coup Power Shell et les 2 fichiers excel ont été converti en .CSV

les noms des composants \"RIS\", PRINT, .... équivalent à comp1, Comp2, COmp3, ...

je joins a ce poste une image d'un extrait d emes 2 fichiers. LEs 6 premieres lignes. Dans cet exemple, le serveur d ela ligne 6 du fichier A n'est pas présent dans le fichier B à la ligne 6 (ni dans aucune ligne du fichier B d'ailleurs)

Quand j'utilisais compare-object, il comparait ligne par ligne sans se soucier de savoir s'il compare le même serveur ou non.

Merci de toute aide.
je consacre ma matinée à cela ...

Message édité par: Spama, à: 26/09/12 08:42

Message édité par: Spama, à: 26/09/12 08:43

EDIT : Bon je n'arrive pas à uploader mes images qui sont au format PNG. Quand je les poste il me dit que le forum n'accepte que les .txt, PDF et 1 autre format.

Quand je les mets au format PDF le forum me dit qu'il n'accepte que des images de type jpeg, giff ou PNG. -_-' Il est pas contrariant ce matin<br><br>Message édité par: Spama, à: 26/09/12 08:45

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

Plus d'informations
il y a 13 ans 7 mois #12778 par SiSMik
Pourquoi une image, pour que nous ayons à les recopier à la main ? :P

Faites juste un copier coller de quelques lignes de chaque fichiers dans des balises \&quot;Quote\&quot;

Vous vous embêtez trop !

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

  • Spama
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 13 ans 7 mois #12782 par Spama
Réponse de Spama sur le sujet Re:Comparaison avancée de 2 fichiers
Je sais pas -_-' je dois être compliquée comme personne

Voici les 5 premiere slignes du fichier A

Server OSSupport Level Server Status RIS Print SavNetApp SEPGUP IAS/NTP SCCM RODC
srvBN001 Premium 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
srvEN001 Standard 0 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
srvEN006 Premium 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
srvNJN001 Premium 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE
srvUCN601 Standard 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE


Et les 5 premieres lignes du fichier B

srvBN001 Premium 1 TRUE TRUE FALSE FALSE FALSE TRUE FALSE
srvAN001 Standard 0 TRUE TRUE FALSE TRUE FALSE FALSE FALSE
srvEN006 Premium 1 TRUE TRUE FALSE FALSE FALSE TRUE FALSE
srvNJN001 Premium 1 TRUE TRUE FALSE TRUE FALSE TRUE FALSE
srvUCN601 Standard 1 TRUE TRUE FALSE FALSE FALSE TRUE FALSE


COmme vous pouvez le voir, les serveurs ne correspondent pas forcément N° de ligne.

Pour le moment pour faire la comparaison de tous mes composants j'ai fait la manip suivante :
Je change dans le code le composant cité à la ligne 18. Je précise par [code:1]-and $serversA[$server].RIS -eq \&quot;TRUE\&quot;[/code:1]

Ligne complète [code:1]if ($serversA[$server].RIS -ne $serversB[$server].RIS-and $serversA[$server].RIS -eq \&quot;TRUE\&quot; )[/code:1]
Comme ca le script me ressort le nom des serveurs qui ont dans le fichier A, la valeur recherchée sur TRUE. Comme ca je sais que dans le fichier B ces serveurs ont la valeur de RIS sur FALSE.

et je fais pareil pour tous les composants et je copie/colle a chaque fois les serveurs dans une feuille excel.

Dison que c'est 50% automatisé et 50% manuel. :)



[code:1]$serversA = @{} #Création tableau qui va stocker le fichier 1
$serversB = @{} #Création tableau qui va stocker fichier 2



Import-Csv -delimiter \&quot;;\&quot; C:\sid.csv -header \&quot;Server\&quot;,\&quot;OSSupport level\&quot;,\&quot;Server Status\&quot;, \&quot;RIS\&quot;,\&quot;PRINT\&quot;,\&quot;SavNetApp\&quot;, \&quot;Segup\&quot;, \&quot;IAS\&quot;,\&quot;SCCM\&quot;,\&quot;RODC\&quot;| ForEach-Object {$serversA[$_.Server] = $_} # Chaque entree du fichier 1 va etre stocké dans le tableau A avbec le nom de serveur comme index
Import-Csv -delimiter \&quot;;\&quot; C:\web.csv -header \&quot;Server\&quot;,\&quot;OSSupport level\&quot;,\&quot;Server Status\&quot;, \&quot;RIS\&quot;,\&quot;PRINT\&quot;,\&quot;SavNetApp\&quot;, \&quot;Segup\&quot;, \&quot;IAS\&quot;,\&quot;SCCM\&quot;,\&quot;RODC\&quot;| ForEach-Object {$serversB[$_.Server] = $_}
#Import-Csv -delimiter \&quot;;\&quot; C:\vide.csv -header \&quot;Server\&quot;,\&quot;OSSupport level\&quot;,\&quot;Server Status\&quot;, \&quot;RIS\&quot;,\&quot;PRINT\&quot;,\&quot;SavNetApp\&quot;, \&quot;Segup\&quot;, \&quot;IAS\&quot;,\&quot;SCCM\&quot;,\&quot;RODC\&quot;| ForEach-Object {$ris[$_.Server] = $_}
foreach ($server in $serversA.Keys | Sort-Object)
{ #pour chaque entrée du tableau1


if (($serversB.ContainsKey($server)) -and (Compare-Object $serversA.keys $serversB.keys))
{



if ($serversA[$server].RIS -ne $serversB[$server].RIS-and $serversA[$server].RIS -eq \&quot;TRUE\&quot; ) #changer le nom du composant à tester
{

write-host $server #$serversA[$server].\&quot;Server Status\&quot; $serversB[$server].\&quot;Server Status\&quot;


}


}


} [/code:1]

Au final j'ai un document excel avec chaque feuille correspondant à un composant, par exemple le composant RIS que vous pouvez en piece jointe (si ca marche ^^ )



Ca n'a pas marché :/ donc voici un lien : hpics.li/e4c1b31
Voilà ce que je cherche a faire.

Merci de votre lecture et de votre temps

Message édité par: Spama, à: 26/09/12 16:41

Message édité par: Spama, à: 26/09/12 16:44<br><br>Message édité par: Spama, à: 26/09/12 16:45

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

Plus d'informations
il y a 13 ans 7 mois #12784 par SiSMik
N'étant toujours pas sur de ce que vous souhaitez faire, je suis parti sur le code suivant.

J'ai changé le header de vos fichiers csv en transformant OSSupport Level en OSSupportLevel et Server Status en Status, car les propriétés avec des espaces ça doit pas être kikoo lol.

Voici le code que j'ai pondu, il y a surement mieux à faire, mais ça fonctionne à priori.

ServerA.csv
[code:1]Server;OSSupportLevel;Status;RIS;Print;SavNetApp;SEPGUP;IAS/NTP;SCCM;RODC
srvBN001;Premium;1;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE
srvEN001;Standard;0;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE
srvEN006;Premium;1;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE
srvNJN001;Premium;1;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE
srvUCN601;Standard;1;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE[/code:1]

ServerB.csv
[code:1]Server;OSSupportLevel;Status;RIS;Print;SavNetApp;SEPGUP;IAS/NTP;SCCM;RODC
srvBN001;Premium;1;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE
srvAN001;Standard;0;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;FALSE
srvEN006;Premium;1;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE
srvNJN001;Premium;1;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE
srvUCN601;Standard;1;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE[/code:1]


[code:1]#Import des csv dans les tableaux d'objets
$A = Import-Csv -delimiter \&quot;;\&quot; D:\Powershell\ServerA.csv -header \&quot;Server\&quot;,\&quot;OSSupportlevel\&quot;,\&quot;Status\&quot;, \&quot;RIS\&quot;,\&quot;PRINT\&quot;,\&quot;SavNetApp\&quot;, \&quot;Segup\&quot;, \&quot;IAS\&quot;,\&quot;SCCM\&quot;,\&quot;RODC\&quot;
$B = Import-Csv -delimiter \&quot;;\&quot; D:\Powershell\ServerB.csv -header \&quot;Server\&quot;,\&quot;OSSupportlevel\&quot;,\&quot;Status\&quot;, \&quot;RIS\&quot;,\&quot;PRINT\&quot;,\&quot;SavNetApp\&quot;, \&quot;Segup\&quot;, \&quot;IAS\&quot;,\&quot;SCCM\&quot;,\&quot;RODC\&quot;


Echo \&quot;ServerA;ServerB;Service;StatusA;StatusB\&quot; &gt;&gt; D:\Powershell\Resultat.csv
ForEach ($server in $A) {
$Computer = $server.server
Foreach ($entry in $B«») {
if ($Entry.server -eq $Computer) {
$ComputerB = $Entry.server
$ServerInfo = ($Server | gm -MemberType Properties).Name
for ($k=0;$k -lt $ServerInfo.count;$k++) {
$ServiceA = $Server.$($ServerInfo[$k])
$ServiceB = $Entry.$($ServerInfo[$k])
if ($Computer -ne \&quot;Server\&quot;«») {
$Information = $Computer + \&quot;;\&quot; + $Entry.server + \&quot;;\&quot; + $ServerInfo[$k] + \&quot;;\&quot; + $ServiceA + \&quot;;\&quot; + $ServiceB
Echo $Information &gt;&gt; D:\Powershell\Resultat.csv
}
}
}
}
}[/code:1]

En résultat, j'obtiens ceci
[code:1]ServerA;ServerB;Service;StatusA;StatusB
srvBN001;srvBN001;IAS;FALSE;FALSE
srvBN001;srvBN001;OSSupportlevel;Premium;Premium
srvBN001;srvBN001;PRINT;FALSE;TRUE
srvBN001;srvBN001;RIS;FALSE;TRUE
srvBN001;srvBN001;RODC;FALSE;FALSE
srvBN001;srvBN001;SavNetApp;FALSE;FALSE
srvBN001;srvBN001;SCCM;FALSE;TRUE
srvBN001;srvBN001;Segup;FALSE;FALSE
srvBN001;srvBN001;Server;srvBN001;srvBN001
srvBN001;srvBN001;Status;1;1
srvEN006;srvEN006;IAS;FALSE;FALSE
srvEN006;srvEN006;OSSupportlevel;Premium;Premium
srvEN006;srvEN006;PRINT;FALSE;TRUE
srvEN006;srvEN006;RIS;FALSE;TRUE
srvEN006;srvEN006;RODC;FALSE;FALSE
srvEN006;srvEN006;SavNetApp;FALSE;FALSE
srvEN006;srvEN006;SCCM;FALSE;TRUE
srvEN006;srvEN006;Segup;FALSE;FALSE
srvEN006;srvEN006;Server;srvEN006;srvEN006
srvEN006;srvEN006;Status;1;1
srvNJN001;srvNJN001;IAS;FALSE;FALSE
srvNJN001;srvNJN001;OSSupportlevel;Premium;Premium
srvNJN001;srvNJN001;PRINT;FALSE;TRUE
srvNJN001;srvNJN001;RIS;FALSE;TRUE
srvNJN001;srvNJN001;RODC;FALSE;FALSE
srvNJN001;srvNJN001;SavNetApp;FALSE;FALSE
srvNJN001;srvNJN001;SCCM;FALSE;TRUE
srvNJN001;srvNJN001;Segup;FALSE;TRUE
srvNJN001;srvNJN001;Server;srvNJN001;srvNJN001
srvNJN001;srvNJN001;Status;1;1
srvUCN601;srvUCN601;IAS;FALSE;FALSE
srvUCN601;srvUCN601;OSSupportlevel;Standard;Standard
srvUCN601;srvUCN601;PRINT;FALSE;TRUE
srvUCN601;srvUCN601;RIS;FALSE;TRUE
srvUCN601;srvUCN601;RODC;FALSE;FALSE
srvUCN601;srvUCN601;SavNetApp;FALSE;FALSE
srvUCN601;srvUCN601;SCCM;FALSE;TRUE
srvUCN601;srvUCN601;Segup;FALSE;FALSE
srvUCN601;srvUCN601;Server;srvUCN601;srvUCN601
srvUCN601;srvUCN601;Status;1;1
[/code:1]

Bonne nuit.

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

  • Spama
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 13 ans 7 mois #12785 par Spama
Réponse de Spama sur le sujet Re:Comparaison avancée de 2 fichiers
C'est à peu près ça :)*
j'ai juste pu lancer le code mais rien ne sort, le script marche pourtant bien car avec un write-host a qques endroits ca ressort les bonnes infos.

Je vais me pencher dessus et posterai le code \&quot;final\&quot; à ce stade.
je reviens la semaine prochaine,

encore merci pour votre aide et les pistes proposées

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

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