Question
Comparaison de 2 colonnes dans 2 fichiers csv
- PatriceLT
- Auteur du sujet
- Visiteur
-
il y a 9 ans 3 mois #23102
par PatriceLT
Réponse de PatriceLT sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
Aucun soucis, c'est déjà une grosse avancée ! Je te remercie vraiment, j'attendrai ton cours la semaine prochaine.
Bon week end à vous 2 !!!!
Merci encore, j'attend la suite
Bon week end à vous 2 !!!!
Merci encore, j'attend la suite
Connexion ou Créer un compte pour participer à la conversation.
- PatriceLT
- Auteur du sujet
- Visiteur
-
il y a 9 ans 3 mois #23105
par PatriceLT
Réponse de PatriceLT sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
Bonjour,
J'espère que vous avez passer un bon week end.
Je reviens vers vous concernant le script.
J'ai trouvé une solution correspondant à ma demande, qui était de pouvoir sauvegarder avec un nom de fichier mon fichier csv.
Pour cela, j'ai utilisé un bout de code depuis internet, et l'ai modifié à mes besoins.
J'ai maintenant une question concernant mes valeurs rentrées lors de la sauvegarde du fichier. Entre autre j'utilise une fenêtre PARCOURIR afin de rentrer le fichier manuellement via Forms.SaveFileDialog.
Voici le code original :
[code:1]
Import-Module ActiveDirectory
Import-Module GroupPolicy
$ErrorActionPreference = 'Stop'
function Parcourir
{
param([string]$Titre,[string]$Dossier,[string]$Filtre = \"Tous les fichiers *.* | *.*\"«»)
[System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«») | Out-Null
$BouttonParcourir = New-Object System.Windows.Forms.SaveFileDialog
$BouttonParcourir.InitialDirectory = $Dossier
$BouttonParcourir.Filter = \"Fichier CSV (*.csv) | *.csv\"
$BouttonParcourir.Title = $Titre
$Show = $BouttonParcourir.ShowDialog()
if($Show -eq \"OK\"«»)
{
Return $BouttonParcourir.FileName
}
else
{
Write-Error \"Opération Annulée\"
$ErrorActionPreference | Out-Null
}
}
$Sauvegarder = Parcourir -Titre \"Sauvegarder en CSV\" -Dossier \"C:\\" -Filtre \"Fichier CSV (*.csv) | *.csv\"
$DATE = Get-Date -Format \"yyyy-MM-dd_HH-mm\"
[...]
$GPO | Export-Csv \"$Sauvegarder\" -Delimiter \";\" -NoTypeInformation
[/code:1]
Je souhaiterais donc savoir, si on peut mettre la variable $DATE au niveau du fichier en sortie d'Export-CSV.
Donc lorsque je lance le script, la fenêtre Parcourir s'ouvre, j'entre alors un nom Test qui sauvegarde en Test.csv dans C:
Afin de pouvoir identifier les fichiers, j'aurais souhaité rajouter la variable $DATE à Test.csv ce qui aurait donné comme résultat : 2017-02-06_12-53--Test.csv.
Est-ce possible ?
J'ai testé sans succès le fait de faire un $Sauvegarde.Replace ou même après que le fichier ai été sauvegardé, un Test.csv Replace ... mais rien n'a pour l'instant donné de bons résultats.
Dans un second temps, je voudrai savoir si il est possible d'automatiser cela dans un script afin d'automatiser la génération de fichier supplémentaire.
La première partie correspondrait au fichier de référence que j'utiliserai.
Merci beaucoup pour vos réponses.<br><br>Message édité par: PatriceLT, à: 6/02/17 12:56
J'espère que vous avez passer un bon week end.
Je reviens vers vous concernant le script.
J'ai trouvé une solution correspondant à ma demande, qui était de pouvoir sauvegarder avec un nom de fichier mon fichier csv.
Pour cela, j'ai utilisé un bout de code depuis internet, et l'ai modifié à mes besoins.
J'ai maintenant une question concernant mes valeurs rentrées lors de la sauvegarde du fichier. Entre autre j'utilise une fenêtre PARCOURIR afin de rentrer le fichier manuellement via Forms.SaveFileDialog.
Voici le code original :
[code:1]
Import-Module ActiveDirectory
Import-Module GroupPolicy
$ErrorActionPreference = 'Stop'
function Parcourir
{
param([string]$Titre,[string]$Dossier,[string]$Filtre = \"Tous les fichiers *.* | *.*\"«»)
[System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«») | Out-Null
$BouttonParcourir = New-Object System.Windows.Forms.SaveFileDialog
$BouttonParcourir.InitialDirectory = $Dossier
$BouttonParcourir.Filter = \"Fichier CSV (*.csv) | *.csv\"
$BouttonParcourir.Title = $Titre
$Show = $BouttonParcourir.ShowDialog()
if($Show -eq \"OK\"«»)
{
Return $BouttonParcourir.FileName
}
else
{
Write-Error \"Opération Annulée\"
$ErrorActionPreference | Out-Null
}
}
$Sauvegarder = Parcourir -Titre \"Sauvegarder en CSV\" -Dossier \"C:\\" -Filtre \"Fichier CSV (*.csv) | *.csv\"
$DATE = Get-Date -Format \"yyyy-MM-dd_HH-mm\"
[...]
$GPO | Export-Csv \"$Sauvegarder\" -Delimiter \";\" -NoTypeInformation
[/code:1]
Je souhaiterais donc savoir, si on peut mettre la variable $DATE au niveau du fichier en sortie d'Export-CSV.
Donc lorsque je lance le script, la fenêtre Parcourir s'ouvre, j'entre alors un nom Test qui sauvegarde en Test.csv dans C:
Afin de pouvoir identifier les fichiers, j'aurais souhaité rajouter la variable $DATE à Test.csv ce qui aurait donné comme résultat : 2017-02-06_12-53--Test.csv.
Est-ce possible ?
J'ai testé sans succès le fait de faire un $Sauvegarde.Replace ou même après que le fichier ai été sauvegardé, un Test.csv Replace ... mais rien n'a pour l'instant donné de bons résultats.
Dans un second temps, je voudrai savoir si il est possible d'automatiser cela dans un script afin d'automatiser la génération de fichier supplémentaire.
La première partie correspondrait au fichier de référence que j'utiliserai.
Merci beaucoup pour vos réponses.<br><br>Message édité par: PatriceLT, à: 6/02/17 12:56
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 #23110
par Philippe
Réponse de Philippe sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
salut PatriceLT
tu a beaucoup de chance que ce script m'intéresse pour mon travail
tu coup je t'ai fait le script avec des commentaires
j'ai rajouter la date au nom du fichier,
j'utilise ta fonction parcourir,
j'ai implémenté la gestion d'un référentielle
pour le référentielle il faut lancer le script avec le paramètre \"-r\" ou \"-reference\"
ex :
[code:1]'.\comparaison des gpo.ps1' -reference[/code:1]
voici le code, actuellement il n'y a pas de gestion d'erreur
si tu a des questions ... :
[code:1]
[cmdletbinding()]
Param(
[switch]$reference
)
# enlevé le # pour simulé la presnce du paramletre reference
#[switch]$reference = [switch]::«»Present
Import-Module ActiveDirectory
Import-Module GroupPolicy
# nom du dossier/fichier contenant le num du fichier reference
$fichierref = \"C:\ref.txt\"
# arret du script en cas d'erreur
$ErrorActionPreference = 'Continue'
# fonction pour avoir une fenêtre Parcourir
function Parcourir {
param([string]$Titre,[string]$Dossier,[string]$Filtre = \"Tous les fichiers *.* | *.*\"«»)
[System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«») | Out-Null
$BouttonParcourir = New-Object System.Windows.Forms.SaveFileDialog
$BouttonParcourir.InitialDirectory = $Dossier
$BouttonParcourir.Filter = \"Fichier CSV (*.csv) | *.csv\"
$BouttonParcourir.Title = $Titre
$Show = $BouttonParcourir.ShowDialog()
if ($Show -eq \"OK\"«») {
# retourne le nom de fichier choisi
Return $BouttonParcourir.FileName
}
else {
# rerourne null pour arrété le script
Return $null
}
}
if ($reference.IsPresent) {
Write-Host \"creation d'un fichier reference\" -ForegroundColor Magenta
$titre = \"nom du fichier de sauvegarde du referenciel en CSV\"
}
else {
$titre = \"nom du fichier de sauvegarde des GPOs actuel en CSV\"
}
# appel de la fonction Parcourir pour avoir un nom de fichier pour la comparaison
$Sauvegarder = Parcourir -Titre $titre -Dossier \"C:\\" -Filtre \"Fichier CSV (*.csv) | *.csv\"
# si aucun nom de fichier n'a été donner on arrête le script
if ($Sauvegarder -eq $null) {
Write-host \"Opération Annulée\" -ForegroundColor Red
write-host \"Pas de nom de fichier\" -ForegroundColor Red
exit
}
else {
# recup de la date au format année mois jours heure minutes
$DATE = Get-Date -Format \"yyyy-MM-dd_HH-mm\"
# insertion de la date devant le nom de fichier
$Sauvegarder = (Split-Path $Sauvegarder -Parent) + \"\\" + $DATE + \"_\" + (Split-Path $Sauvegarder -Leaf)
write-host \"nom et chemin du fichier : $Sauvegarder\" -ForegroundColor Green
}
# recup de toutes les GPOs avec le numero de version user et computer
$GPO = Get-GPO -All | select DomainName, DisplayName, @{Label = \"UserVersion\"; Expression = {$_.user.dsversion}},
@{Label = \"ComputerVersion\";Expression = {$_.computer.dsversion}}, CreationTime, ModificationTime, id | sort DisplayName
# enregistrement des GPOs
$GPO | Export-Csv $Sauvegarder -Delimiter \";\" -NoTypeInformation
if ($reference.IsPresent) {
# stockage du nouveau nom du fichier de reference
$Sauvegarder | Set-Content $fichierref
}
else {
# chargement du fichier de reference des GPOs
$gpo1 = Import-Csv $(get-Content $fichierref ) -Delimiter \";\"
# chargement du fichier des GPOs actuel
$gpo2 = Import-Csv $Sauvegarder -Delimiter \";\"
# comparaison des deux versions de GPO
$diff = Compare-Object -ReferenceObject $gpo1 -DifferenceObject $gpo2 -Property UserVersion, ComputerVersion -PassThru |
# filtrage pour ne gardé que la nouvelle version
where {$_.SideIndicator -eq \"=>\"} |
# suppression de l'attribut SideIndicator
select * -ExcludeProperty SideIndicator
# enregistrement si il y a des differences
if ($diff) {
$diff | export-csv $($Sauvegarder.Insert($Sauvegarder.LastIndexOf(\".\"«»), \"_diff\"«»)) -Delimiter \",\" -NoTypeInformation
Write-Host \"nom du fichier avec diffence de version entre GPO :$($Sauvegarder.Insert($Sauvegarder.LastIndexOf(\".\"«»), \"_diff\"«»))\" -ForegroundColor Yellow
}
else {
Write-Host \"il n'y a pas de modification de GPO par raport au référentielle\" -ForegroundColor Yellow
}
}
[/code:1]
tu a beaucoup de chance que ce script m'intéresse pour mon travail
tu coup je t'ai fait le script avec des commentaires
j'ai rajouter la date au nom du fichier,
j'utilise ta fonction parcourir,
j'ai implémenté la gestion d'un référentielle
pour le référentielle il faut lancer le script avec le paramètre \"-r\" ou \"-reference\"
ex :
[code:1]'.\comparaison des gpo.ps1' -reference[/code:1]
voici le code, actuellement il n'y a pas de gestion d'erreur
si tu a des questions ... :
[code:1]
[cmdletbinding()]
Param(
[switch]$reference
)
# enlevé le # pour simulé la presnce du paramletre reference
#[switch]$reference = [switch]::«»Present
Import-Module ActiveDirectory
Import-Module GroupPolicy
# nom du dossier/fichier contenant le num du fichier reference
$fichierref = \"C:\ref.txt\"
# arret du script en cas d'erreur
$ErrorActionPreference = 'Continue'
# fonction pour avoir une fenêtre Parcourir
function Parcourir {
param([string]$Titre,[string]$Dossier,[string]$Filtre = \"Tous les fichiers *.* | *.*\"«»)
[System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«») | Out-Null
$BouttonParcourir = New-Object System.Windows.Forms.SaveFileDialog
$BouttonParcourir.InitialDirectory = $Dossier
$BouttonParcourir.Filter = \"Fichier CSV (*.csv) | *.csv\"
$BouttonParcourir.Title = $Titre
$Show = $BouttonParcourir.ShowDialog()
if ($Show -eq \"OK\"«») {
# retourne le nom de fichier choisi
Return $BouttonParcourir.FileName
}
else {
# rerourne null pour arrété le script
Return $null
}
}
if ($reference.IsPresent) {
Write-Host \"creation d'un fichier reference\" -ForegroundColor Magenta
$titre = \"nom du fichier de sauvegarde du referenciel en CSV\"
}
else {
$titre = \"nom du fichier de sauvegarde des GPOs actuel en CSV\"
}
# appel de la fonction Parcourir pour avoir un nom de fichier pour la comparaison
$Sauvegarder = Parcourir -Titre $titre -Dossier \"C:\\" -Filtre \"Fichier CSV (*.csv) | *.csv\"
# si aucun nom de fichier n'a été donner on arrête le script
if ($Sauvegarder -eq $null) {
Write-host \"Opération Annulée\" -ForegroundColor Red
write-host \"Pas de nom de fichier\" -ForegroundColor Red
exit
}
else {
# recup de la date au format année mois jours heure minutes
$DATE = Get-Date -Format \"yyyy-MM-dd_HH-mm\"
# insertion de la date devant le nom de fichier
$Sauvegarder = (Split-Path $Sauvegarder -Parent) + \"\\" + $DATE + \"_\" + (Split-Path $Sauvegarder -Leaf)
write-host \"nom et chemin du fichier : $Sauvegarder\" -ForegroundColor Green
}
# recup de toutes les GPOs avec le numero de version user et computer
$GPO = Get-GPO -All | select DomainName, DisplayName, @{Label = \"UserVersion\"; Expression = {$_.user.dsversion}},
@{Label = \"ComputerVersion\";Expression = {$_.computer.dsversion}}, CreationTime, ModificationTime, id | sort DisplayName
# enregistrement des GPOs
$GPO | Export-Csv $Sauvegarder -Delimiter \";\" -NoTypeInformation
if ($reference.IsPresent) {
# stockage du nouveau nom du fichier de reference
$Sauvegarder | Set-Content $fichierref
}
else {
# chargement du fichier de reference des GPOs
$gpo1 = Import-Csv $(get-Content $fichierref ) -Delimiter \";\"
# chargement du fichier des GPOs actuel
$gpo2 = Import-Csv $Sauvegarder -Delimiter \";\"
# comparaison des deux versions de GPO
$diff = Compare-Object -ReferenceObject $gpo1 -DifferenceObject $gpo2 -Property UserVersion, ComputerVersion -PassThru |
# filtrage pour ne gardé que la nouvelle version
where {$_.SideIndicator -eq \"=>\"} |
# suppression de l'attribut SideIndicator
select * -ExcludeProperty SideIndicator
# enregistrement si il y a des differences
if ($diff) {
$diff | export-csv $($Sauvegarder.Insert($Sauvegarder.LastIndexOf(\".\"«»), \"_diff\"«»)) -Delimiter \",\" -NoTypeInformation
Write-Host \"nom du fichier avec diffence de version entre GPO :$($Sauvegarder.Insert($Sauvegarder.LastIndexOf(\".\"«»), \"_diff\"«»))\" -ForegroundColor Yellow
}
else {
Write-Host \"il n'y a pas de modification de GPO par raport au référentielle\" -ForegroundColor Yellow
}
}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- PatriceLT
- Auteur du sujet
- Visiteur
-
il y a 9 ans 3 mois #23114
par PatriceLT
Réponse de PatriceLT sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
Bonjour 6ratgus,
J'espère que ton week end s'est bien passé.
Je sais que je suis chanceux, certains me le disent souvent
Je te remercie vraiment pour ce script, je le testerai dès que j'aurai un peu de temps.
Je te tiens au courant.
Merci encore à toi d'avoir pondu ce script qui va énormément m'aider !
J'espère que ton week end s'est bien passé.
Je sais que je suis chanceux, certains me le disent souvent
Je te remercie vraiment pour ce script, je le testerai dès que j'aurai un peu de temps.
Je te tiens au courant.
Merci encore à toi d'avoir pondu ce script qui va énormément m'aider !
Connexion ou Créer un compte pour participer à la conversation.
- PatriceLT
- Auteur du sujet
- Visiteur
-
il y a 9 ans 3 mois #23121
par PatriceLT
Réponse de PatriceLT sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
Bonjour Messieurs,
J'ai eu un changement de dernière minute concernant le script que tu m'as fournis.
Le problème est que je ne dois plus avoir de function Parcourir... ce qui complique la tâche car tout doit absolument se faire via Scheduler... donc aucune intervention humaine...
J'ai essayé plusiuers fois de modifier le script mais j'arrive a des erreurs qui ne devrait pas y être.
J'ai en attendant commenté la function (afin de la réutiliser pour d'autres scripts dans l'avenir), cependant vu que tout le corps du script est prit, soit sur les $titres, soit sur la variable $Sauvegarde qui se basait sur les paramètres de la fonction.
Je suis donc un peu perdu, je suis, pour tout avouer, un peu noyé dans tous ces tests xD, je n'ai pas l'habitude de faire des scripts si complexe et si long xD.
Aurais-tu du coup un moyen de contourner la function, en mettant du coup par défaut, les noms des fichiers de sorties, simplement avec la date :
- Fichier de référence : RapportGPO_Reference_[DATE].csv
- Fichier de génération quotidien :
RapportGPO_[DATE].csv
- Fichier de comparaison des 2 :
J'ai adoré cette partie du coup qui génère le fichier de diff
:
RapportGPO_Différence_[DATE].csv
Merci beaucoup, je vais de mon côté revenir au script d'origine que j'avais fait qui est moins complexe, mais du coup qui ne gère ni les erreurs, ni le fichier de diff, ni les noms d'ailleurs.
Je vais regarder cela de plus près.
Merci,
Patrice
J'ai eu un changement de dernière minute concernant le script que tu m'as fournis.
Le problème est que je ne dois plus avoir de function Parcourir... ce qui complique la tâche car tout doit absolument se faire via Scheduler... donc aucune intervention humaine...
J'ai essayé plusiuers fois de modifier le script mais j'arrive a des erreurs qui ne devrait pas y être.
J'ai en attendant commenté la function (afin de la réutiliser pour d'autres scripts dans l'avenir), cependant vu que tout le corps du script est prit, soit sur les $titres, soit sur la variable $Sauvegarde qui se basait sur les paramètres de la fonction.
Je suis donc un peu perdu, je suis, pour tout avouer, un peu noyé dans tous ces tests xD, je n'ai pas l'habitude de faire des scripts si complexe et si long xD.
Aurais-tu du coup un moyen de contourner la function, en mettant du coup par défaut, les noms des fichiers de sorties, simplement avec la date :
- Fichier de référence : RapportGPO_Reference_[DATE].csv
- Fichier de génération quotidien :
RapportGPO_[DATE].csv
- Fichier de comparaison des 2 :
J'ai adoré cette partie du coup qui génère le fichier de diff
RapportGPO_Différence_[DATE].csv
Merci beaucoup, je vais de mon côté revenir au script d'origine que j'avais fait qui est moins complexe, mais du coup qui ne gère ni les erreurs, ni le fichier de diff, ni les noms d'ailleurs.
Je vais regarder cela de plus près.
Merci,
Patrice
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 #23122
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Comparaison de 2 colonnes dans 2 fichiers csv
Salut,
PatriceLT écrit:
Si c'est complexe il faut découper en parties simples
PatriceLT écrit:
Des traitements automatisés sans gestion d'erreur, mais comment vous dire...
PatriceLT écrit:
Ce n'est pas complexe, mais si tu débutes cela fait pas mal d'infos à digérer d'un coup.un peu noyé dans tous ces tests xD, je n'ai pas l'habitude de faire des scripts si complexe et si long xD.
Si c'est complexe il faut découper en parties simples
PatriceLT écrit:
Je sens que certains vont bien s'amuser en prodmais du coup qui ne gère ni les erreurs
Des traitements automatisés sans gestion d'erreur, mais comment vous dire...
Tutoriels PowerShell
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