Question Export en fichier csv après traitement

Plus d'informations
il y a 2 ans 4 mois #31564 par dumont
Bonjour,

Je m'en remets à vous car je tourne en rond depuis ce matin. On m'a mis sur le traitement d'un fichier xml pour lequel je dois récupérer des données.

Je parviens à tout avoir dans un fichier CSV mais je ne suis pas parvenu à garder seulement ce qui m'interessait (à savoir seulement les lignes utilisateurs qui ont @mondomaine.com)

J'ai donc décidé de faire un second traitement sur le premier fichier CSV, avec ma condition je récupère exactement ce que je veux avec l'affichage de $line
foreach($line in Get-Content .\RESULTATS_POWERSHELL.CSV) {
if($line -like "*@mondomaine.com*"){
$line
}
}

Je voudrais maintenant exporter ce nouveau traitement dans un fichier CSV, j'ai essayé avec cette ligne dans le if à la place de juste $line, mais ça ne donne rien
$line | Export-Csv ".\RESULTATS2_POWERSHELL.CSV" -NoTypeInformation -Delimiter:";" -Encoding:UTF8

Est-ce que quelqu'un pourrait m'aiguiller là dessus, ça serait très gentil !

Merci !

 

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

Plus d'informations
il y a 2 ans 4 mois #31566 par Philippe
salut dumont

plusieurs solutions :

solution 1 
Add-Content  pour rajouter ligne par ligne tes données dans un fichier
tu doit vider et créé le fichier avec l'entête CSV avant
foreach ($line in Get-Content .\RESULTATS_POWERSHELL.CSV) {
    if($line -like "*@mondomaine.com*"){
        $line | Add-Content -path ".\RESULTATS2_POWERSHELL.CSV"
    }
}

solution 2 
le append du export-CSV (oui c'est tout bête mais normalement dans ce cas tu doit lire le csv avec import-csv et non pas get-content mais ça te tente)
$line | Export-Csv ".\RESULTATS2_POWERSHELL.CSV" -NoTypeInformation -Delimiter:";" -Encoding:UTF8 -append

solution 3
l'export-csv en fin de boucle (à testé suivant les situations ) normalement dans ce cas tu doit lire le csv avec import-csv et non pas get-content :
foreach ($line in Get-Content .\RESULTATS_POWERSHELL.CSV) {
    if($line -like "*@mondomaine.com*"){
        $line 
    }
} | Export-Csv ".\RESULTATS2_POWERSHELL.CSV" -NoTypeInformation -Delimiter:";" -Encoding:UTF8

comme tu vois il y a des solutions, a toi de voir celle que tu préfère et qui fonctionne ! 

a+ 
Les utilisateur(s) suivant ont remercié: dumont

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

Plus d'informations
il y a 2 ans 4 mois - il y a 2 ans 4 mois #31568 par dumont
Bonjour Philippe !

Merci beaucoup, ça fonctionne !

J'ai essayé les 3 méthodes mais ça ne reprend pas les noms de colonnes du premier CSV RESULTATS_POWERSHELL.CSV, je vais je pense en avoir besoin après car je dois comparer des users AD aux lignes du CSV pour ajouter des valeurs dans des attributs

Tu penses que c'est simplement la condition if qui fait que la première ligne avec les noms de colonnes est supprimée ?

EDIT: à priori rien a voir avec le if, il y a juste sur la première méthode que ça enlève les noms de colonnes, pour les deux autres ça les laisse mais tout est dans une seule colonne
[xml]$fichierxml = Get-Content ".\fichier.xml"
$fichierxml.noeud1.noeud2 | Export-Csv ".\complet.csv" -NoTypeInformation -Delimiter:";" -Encoding:UTF8

Remove-Item .\trie.csv

foreach($line in Get-Content .\complet.csv)
{
    if($line -like "*@mondomaine.fr*")
    {
    $line
        $line | Add-Content -path ".\trie.csv"
    }
}
Dernière édition: il y a 2 ans 4 mois par dumont.

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

Plus d'informations
il y a 2 ans 4 mois #31569 par Philippe
en faite ton probleme est que tu lis le fichier par un get-content, ce qui fait que tu perd la ligne entete !

la meilleur solution c'est de faire une boucle en utilisant import-csv :
et d'utilisé la solution 2 'le append)
il va falloir aussi indiquer dans la condition du if sur quelle attribut faire la recherche du nom de domaine (j'ai mis UserPrincipalName mais tu peux changer)
$alllinescsv = Import-Csv ".\complet.csv" -NoTypeInformation -Delimiter:";" -Encoding:UTF8
foreach ($line in $alllinescsv)
{
    if ($line.UserPrincipalName -like "*@mondomaine.fr*")
    {
    $line
        $line | export-csv -append  -path ".\trie.csv" -NoTypeInformation -Delimiter:";" -Encoding:UTF8
    }
}
Les utilisateur(s) suivant ont remercié: dumont

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

Plus d'informations
il y a 2 ans 4 mois - il y a 2 ans 4 mois #31571 par dumont
Bonjour Philippe, merci énormément pour ton aide, je commence à saisir un peu les différents problèmes que j'ai rencontré !

Ma dernière étape est de passer en revue ce fichier csv sur un active directory et de dire que si je trouve le nom de la personne et le mail, alors je fais une action sur son compte (ajouter un attribut qui est dans ce même csv)

J'ai essayé ça:
Import-Module ActiveDirectory

$csvtrie = Import-Csv ".\trie.csv" -Delimiter:";" -Encoding:UTF8

foreach ($line in $csvtrie)
{
Get-ADUser -Filter "Name -eq '$($line.Nom)'" | write-Host 'mon action'
}

Mais ça ne me ressort rien pour le moment


EDIT:

J'ai pu trouver ça, par contre ça ne me ressort que des $false
$csv = Import-Csv ".\trie.csv" -Delimiter:";" -Encoding:UTF8

ForEach ($user in $csv)
{
    $nom = $user.Nom;
    $adsearch = Get-ADUser -Filter {(Name -eq $nom) -and (Enabled -eq $true)}
    if ($adsearch)
    {
        $true
    }
    else
    {
        $false
    }
}


 
Dernière édition: il y a 2 ans 4 mois par dumont.

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

Plus d'informations
il y a 2 ans 4 mois #31572 par dumont
J'ai bien trouvé avec quelque chose comme ça, je pense que c'est execrable niveau code mais ça fonctionne :D
Import-Module activedirectory

$csv = Import-Csv ".\trie.csv" -Delimiter:";" -Encoding:UTF8

ForEach ($user in $csv)
{
    $mail = $user.Courriel;
    $nom = $user.Nom;
    $prenom = $user.Prenom;
    $displayname = "$prenom $nom";
    $adsearch = Get-ADUser -Filter {(Mail -eq $mail) -and (DisplayName -eq $displayname) -and (Enabled -eq $true)}
    if ($adsearch)
    {
        $mail
    }
    else
    {
        echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>> ne trouve pas pour $displayname - $mail";
    }
}

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

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