Question
Recherche dans des fichiers CSV
- Cedric
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 10 ans 4 mois #20956
par Cedric
Recherche dans des fichiers CSV a été créé par Cedric
Bonjour à tous,
Je débute dans Powershell et la je dois réaliser un script qui doit rechercher dans une liste le nom d'un serveur et son url et le comparer avec la liste des utilisateurs.Le but étant de créer un répertoire au nom de l'utilisateur s'il n'existe pas sur le bon serveur.
Avec un exemple cela sera plus parlant (enfin je l'espère)
Donc j'ai un fichier serveurs.csv qui se présente ainsi :
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
\"LocalisationServeur\",\"URLRepUserServeur\"
\"XXX\",\"\\XXX\users\"
\"YYY\",\"\\YYY\users\"
\"ZZZ\",\"\\ZZZ\users\"
J'ai extrait la liste des utilisateurs de mon AD avec ce script :
[code:1]Import-Module ActiveDirectory
Get-ADUser -Filter * | Select-Object DistinguishedName, SamAccountName | Export-Csv test.csv -Encoding Unicode[/code:1]
Mon fichier test.csv se présente donc ainsi :
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
\"DistinguishedName\",\"SamAccountName\"
\"CN=Administrateur,CN=Users,DC=aaa,DC=fr\",\"Administrateur\"
\"CN=Invité,CN=Users,DC=aaa,DC=fr\",\"Invité\"
\"CN=krbtgt,CN=Users,DC=aaa,DC=fr\",\"krbtgt\"
\"CN=user1,OU=Utilisateurs,OU=compta,OU=XXX,OU=Mon_OU,DC=aaa,DC=fr\",\"user1\"
\"CN=user2,OU=Utilisateurs,OU=YYY,OU=Mon_OU,DC=aaa,DC=fr\",\"user2\"
\"CN=user3,OU=Utilisateurs,OU=ZZZ,OU=Mon_OU,DC=aaa,DC=fr\",\"user3\"
Donc à partir de mon fichier serveurs.csv, je prends le champ \"LocalisationServeur\" et je recherche dans le champ DistinguishedName de mon fichier test.csv s'il y a une correspondance.
Voici le code:
[code:1]
$serveurs = Import-Csv serveurs.csv
foreach($serveur in $serveurs)
{
$OUVille=$($serveur.LocalisationServeur)
$cheminServeur=$($serveur.URLServeur)
$correspondance=Select-String -Path test.csv -Pattern $OUVille
# Juste pour voir ce qu'il me trouve
$OUVille
$cheminServeur
$correspondance
}
[/code:1]
Jusque cela marche (après je sais pas si c'est la bonne méthode)
Donc dans mon exemple, ma recherche commence par le serveur XXX, il regarde s'il trouve une correspondance dans mon fichier test. Il trouve la ligne correspondant à user1.
Et la je voudrais qu'avec ma variable $cheminServeur il regarde si le répertoire \\XXX\users\user1 existe ou pas. S'il n'existe pas qu'il le crée.
Pour le test de répertoire j'avais fait cela:
[code:1]
$liste= Import-Csv test.csv
foreach($utilisateur in $liste) {
$compte = $($utilisateur.SamAccountName)
if (Test-Path \"\\XXX\users\$compte\"«»)
{
Write-Output \"le rep $compte existe déjà\"
}
else
{
Write-Output \"Le rep $compte n'existe pas, il va être créer\"
New-Item -ItemType directory -Name $compte -Path \\XXX\users\test
}
}
[/code:1]
Ce code était juste pour tester.
Dans mon script final il faudra que je mette Test-Path $cheminServeur\$compte et New-Item -Path $cheminServeur
Je pense que je dois faire un mélange des 2 codes mais je sais pas comment.
Cela fait 2 jours que j'essaye différents trucs mais pas moyen.
Donc déjà merci de m'avoir lu car c'est un peu long
Et un grand merci à ceux qui pourront m'aider.
Je débute dans Powershell et la je dois réaliser un script qui doit rechercher dans une liste le nom d'un serveur et son url et le comparer avec la liste des utilisateurs.Le but étant de créer un répertoire au nom de l'utilisateur s'il n'existe pas sur le bon serveur.
Avec un exemple cela sera plus parlant (enfin je l'espère)
Donc j'ai un fichier serveurs.csv qui se présente ainsi :
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
\"LocalisationServeur\",\"URLRepUserServeur\"
\"XXX\",\"\\XXX\users\"
\"YYY\",\"\\YYY\users\"
\"ZZZ\",\"\\ZZZ\users\"
J'ai extrait la liste des utilisateurs de mon AD avec ce script :
[code:1]Import-Module ActiveDirectory
Get-ADUser -Filter * | Select-Object DistinguishedName, SamAccountName | Export-Csv test.csv -Encoding Unicode[/code:1]
Mon fichier test.csv se présente donc ainsi :
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
\"DistinguishedName\",\"SamAccountName\"
\"CN=Administrateur,CN=Users,DC=aaa,DC=fr\",\"Administrateur\"
\"CN=Invité,CN=Users,DC=aaa,DC=fr\",\"Invité\"
\"CN=krbtgt,CN=Users,DC=aaa,DC=fr\",\"krbtgt\"
\"CN=user1,OU=Utilisateurs,OU=compta,OU=XXX,OU=Mon_OU,DC=aaa,DC=fr\",\"user1\"
\"CN=user2,OU=Utilisateurs,OU=YYY,OU=Mon_OU,DC=aaa,DC=fr\",\"user2\"
\"CN=user3,OU=Utilisateurs,OU=ZZZ,OU=Mon_OU,DC=aaa,DC=fr\",\"user3\"
Donc à partir de mon fichier serveurs.csv, je prends le champ \"LocalisationServeur\" et je recherche dans le champ DistinguishedName de mon fichier test.csv s'il y a une correspondance.
Voici le code:
[code:1]
$serveurs = Import-Csv serveurs.csv
foreach($serveur in $serveurs)
{
$OUVille=$($serveur.LocalisationServeur)
$cheminServeur=$($serveur.URLServeur)
$correspondance=Select-String -Path test.csv -Pattern $OUVille
# Juste pour voir ce qu'il me trouve
$OUVille
$cheminServeur
$correspondance
}
[/code:1]
Jusque cela marche (après je sais pas si c'est la bonne méthode)
Donc dans mon exemple, ma recherche commence par le serveur XXX, il regarde s'il trouve une correspondance dans mon fichier test. Il trouve la ligne correspondant à user1.
Et la je voudrais qu'avec ma variable $cheminServeur il regarde si le répertoire \\XXX\users\user1 existe ou pas. S'il n'existe pas qu'il le crée.
Pour le test de répertoire j'avais fait cela:
[code:1]
$liste= Import-Csv test.csv
foreach($utilisateur in $liste) {
$compte = $($utilisateur.SamAccountName)
if (Test-Path \"\\XXX\users\$compte\"«»)
{
Write-Output \"le rep $compte existe déjà\"
}
else
{
Write-Output \"Le rep $compte n'existe pas, il va être créer\"
New-Item -ItemType directory -Name $compte -Path \\XXX\users\test
}
}
[/code:1]
Ce code était juste pour tester.
Dans mon script final il faudra que je mette Test-Path $cheminServeur\$compte et New-Item -Path $cheminServeur
Je pense que je dois faire un mélange des 2 codes mais je sais pas comment.
Cela fait 2 jours que j'essaye différents trucs mais pas moyen.
Donc déjà merci de m'avoir lu car c'est un peu long
Et un grand merci à ceux qui pourront m'aider.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 4 mois #20957
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Recherche dans des fichiers CSV
Salut,
quelle version de Powershell utilises-tu ?
Est-ce une jointure que tu essaies de réaliser entre deux listes ?
Quel volumétrie de donnée manipules-tu ?
quelle version de Powershell utilises-tu ?
Est-ce une jointure que tu essaies de réaliser entre deux listes ?
Quel volumétrie de donnée manipules-tu ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Cedric
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 10 ans 4 mois #20958
par Cedric
Réponse de Cedric sur le sujet Re:Recherche dans des fichiers CSV
Bonjour,
J utilise la version 2 de Powershell. Concernant le volume de données, je vais avoir une quinzaine de serveurs et environ 2500 utilisateurs.
Non ce n est pas vraiment une jointure.
Merci de m avoir lu
J utilise la version 2 de Powershell. Concernant le volume de données, je vais avoir une quinzaine de serveurs et environ 2500 utilisateurs.
Non ce n est pas vraiment une jointure.
Merci de m avoir lu
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 4 mois #20960
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Recherche dans des fichiers CSV
Le champ 'LocalisationServeur' est un chemin UNC ou un nom de serveur ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 4 mois #20961
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Recherche dans des fichiers CSV
Allez une autre, comment retrouves-tu le nom d'utilisateur dans le fichier Serveurs.csv, en analysant le contenu de la propriété 'URLRepUserServeur' ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Cedric
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 10 ans 4 mois #20975
par Cedric
Réponse de Cedric sur le sujet Re:Recherche dans des fichiers CSV
Je vais essayer de te schématiser cela car je me rends compte que lorsque je publie mon message les backslash disparaissent (EDIT: je vois pas comment mettre les backslash donc je les remplace ici par des antislashs) 
Voici mon AD
Mon fichier serveurs.csv que j'ai renseigné moi même à la main.
\"NOM SERVEUR\",\"CHEMIN UNC\"
\"XXX\",\"//XXX/users/\"
\"YYY\",\"//YYY/users/\"
\"ZZZ\",\"//ZZZ/users/\"
En gros, il faut partir de mon fichier serveurs, prendre le 1er nom serveur (XXX) et rechercher dans mon AD s'il trouve XXX quelque part.
Il trouve une OU correspondant et dans cette OU il y mes utilisateurs (OU Utilisateurs) pour ce site (ps: mes serveurs sont installés sur différents lieux)
A partir de là, je dois vérifier avec le login de connexion de chaque utilisateur de l'OU XXX s'il y a un répertoire à son nom sous la forme :
\\XXX\users\SamAccountName de l'utilisateur
s'il n'existe pas on le crée.
Après autour du serveur YYY.....
Donc au départ j'ai pensé (peut être à tord) que je devais extraire tous mes utilisateurs de mon AD et faire la rechercher sur ce fichier.
D'ou mon code suivant :
[code:1]Import-Module ActiveDirectory
Get-ADUser -Filter * | Select-Object DistinguishedName, SamAccountName | Export-Csv test.csv -Encoding Unicode[/code:1]
qui me donne le fichier test.csv sous cette forme
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
\"DistinguishedName\",\"SamAccountName\"
\"CN=Administrateur,CN=Users,DC=aaa,DC=fr\",\"Administrateur\"
\"CN=Invité,CN=Users,DC=aaa,DC=fr\",\"Invité\"
\"CN=krbtgt,CN=Users,DC=aaa,DC=fr\",\"krbtgt\"
\"CN=user1,OU=Utilisateurs,OU=compta,OU=XXX,OU=Mon_OU,DC=aaa,DC=fr\",\"user1\"
\"CN=user2,OU=Utilisateurs,OU=YYY,OU=Mon_OU,DC=aaa,DC=fr\",\"user2\"
\"CN=user3,OU=Utilisateurs,OU=ZZZ,OU=Mon_OU,DC=aaa,DC=fr\",\"user3\"
J'espère que tu comprends ce que je veux faire, pas évident pour moi de te l'expliquer par écrit.
Message édité par: Sedo59, à: 27/10/15 19:39
Message édité par: Sedo59, à: 27/10/15 19:40
Message édité par: Sedo59, à: 27/10/15 19:42<br><br>Message édité par: Sedo59, à: 27/10/15 19:44
Voici mon AD
Mon fichier serveurs.csv que j'ai renseigné moi même à la main.
\"NOM SERVEUR\",\"CHEMIN UNC\"
\"XXX\",\"//XXX/users/\"
\"YYY\",\"//YYY/users/\"
\"ZZZ\",\"//ZZZ/users/\"
En gros, il faut partir de mon fichier serveurs, prendre le 1er nom serveur (XXX) et rechercher dans mon AD s'il trouve XXX quelque part.
Il trouve une OU correspondant et dans cette OU il y mes utilisateurs (OU Utilisateurs) pour ce site (ps: mes serveurs sont installés sur différents lieux)
A partir de là, je dois vérifier avec le login de connexion de chaque utilisateur de l'OU XXX s'il y a un répertoire à son nom sous la forme :
\\XXX\users\SamAccountName de l'utilisateur
s'il n'existe pas on le crée.
Après autour du serveur YYY.....
Donc au départ j'ai pensé (peut être à tord) que je devais extraire tous mes utilisateurs de mon AD et faire la rechercher sur ce fichier.
D'ou mon code suivant :
[code:1]Import-Module ActiveDirectory
Get-ADUser -Filter * | Select-Object DistinguishedName, SamAccountName | Export-Csv test.csv -Encoding Unicode[/code:1]
qui me donne le fichier test.csv sous cette forme
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser
\"DistinguishedName\",\"SamAccountName\"
\"CN=Administrateur,CN=Users,DC=aaa,DC=fr\",\"Administrateur\"
\"CN=Invité,CN=Users,DC=aaa,DC=fr\",\"Invité\"
\"CN=krbtgt,CN=Users,DC=aaa,DC=fr\",\"krbtgt\"
\"CN=user1,OU=Utilisateurs,OU=compta,OU=XXX,OU=Mon_OU,DC=aaa,DC=fr\",\"user1\"
\"CN=user2,OU=Utilisateurs,OU=YYY,OU=Mon_OU,DC=aaa,DC=fr\",\"user2\"
\"CN=user3,OU=Utilisateurs,OU=ZZZ,OU=Mon_OU,DC=aaa,DC=fr\",\"user3\"
J'espère que tu comprends ce que je veux faire, pas évident pour moi de te l'expliquer par écrit.
Message édité par: Sedo59, à: 27/10/15 19:39
Message édité par: Sedo59, à: 27/10/15 19:40
Message édité par: Sedo59, à: 27/10/15 19:42<br><br>Message édité par: Sedo59, à: 27/10/15 19:44
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.051 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Recherche dans des fichiers CSV