Question
[Résolu]Import de données à partir d'un fich texte
- Jeel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 58
- Remerciements reçus 0
il y a 16 ans 2 semaines #6314
par Jeel
[Résolu]Import de données à partir d'un fich texte a été créé par Jeel
Je fais choux blanc sur ce sujet:
J'ai une liste de shortID
[code:1]ShortIDliste.csv
p.user1
p.user2
p.user3
p.user4[/code:1]Je souhaite récupérer quelques paramètres de ces users. Voici le code récupéré et modifié du livre):
[code:1]foreach ($NomShortID in get-content ShortIDliste.csv) {
# pour récup le cn
$UserPath1 = dsquery user -samid $NomShortID $UserPath2 = $UserPath1 -replace '\"', ''
$UserPath2 -replace ',OU=Accounts,DC=domain,DC=com', '' > temp.txt
$UserPath = Get-Content temp.txt
del temp.txt
#
[datetime]$date = ’01/01/1601’
$adsPath = ’LDAP://'+$UserPath+',OU=Accounts,’ + ([ADSI]’’).distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object System.DirectoryServices.DirectorySearcher($objDomaine)
$requete = ’(&(objectCategory=person)(objectClass=user))’
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$comptes |
select-object @{e={$_.properties.cn};n=’Nom commun’},
@{e={$_.properties.samaccountname};n=’ShortID’},
@{e={$_.properties.employeeID};n=’EmpID’},
@{e={$_.properties.whencreated};n=’Date de création’},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n=’Dernière connexion’},
@{e={$_.properties.mail};n=’Mail’},
@{e={$_.properties.homedrive};n=’HD’}
@{e={$_.properties.scriptpath};n=’ScriptPath’},
@{e={$_.properties.homedirectory};n=’Home Directory’};
}[/code:1]
Ce code fonctionne en rentrant le paramètre ShortID manuellement enlevant \"foreach ($NomShortID in get-content ShortIDliste.csv)\" mais ne retourne plus rien avec foreach. Une idée? Je dois absolument automatiser ce script (tellement simple en batch)[code:1]for /F \"eol=; tokens=1,2,3* delims=;\" %%a in (ShortIDliste.csv) do (
....
....
....
)[/code:1]Please help !!!
Jeel<br><br>Message édité par: Arnaud, à: 11/03/10 09:04
J'ai une liste de shortID
[code:1]ShortIDliste.csv
p.user1
p.user2
p.user3
p.user4[/code:1]Je souhaite récupérer quelques paramètres de ces users. Voici le code récupéré et modifié du livre):
[code:1]foreach ($NomShortID in get-content ShortIDliste.csv) {
# pour récup le cn
$UserPath1 = dsquery user -samid $NomShortID $UserPath2 = $UserPath1 -replace '\"', ''
$UserPath2 -replace ',OU=Accounts,DC=domain,DC=com', '' > temp.txt
$UserPath = Get-Content temp.txt
del temp.txt
#
[datetime]$date = ’01/01/1601’
$adsPath = ’LDAP://'+$UserPath+',OU=Accounts,’ + ([ADSI]’’).distinguishedName
$objDomaine = [ADSI]$adsPath
$objRecherche = New-Object System.DirectoryServices.DirectorySearcher($objDomaine)
$requete = ’(&(objectCategory=person)(objectClass=user))’
$objRecherche.Filter=$requete
$comptes = $objRecherche.FindAll()
$comptes |
select-object @{e={$_.properties.cn};n=’Nom commun’},
@{e={$_.properties.samaccountname};n=’ShortID’},
@{e={$_.properties.employeeID};n=’EmpID’},
@{e={$_.properties.whencreated};n=’Date de création’},
@{e={$date.AddTicks($($_.properties.lastlogontimestamp))};n=’Dernière connexion’},
@{e={$_.properties.mail};n=’Mail’},
@{e={$_.properties.homedrive};n=’HD’}
@{e={$_.properties.scriptpath};n=’ScriptPath’},
@{e={$_.properties.homedirectory};n=’Home Directory’};
}[/code:1]
Ce code fonctionne en rentrant le paramètre ShortID manuellement enlevant \"foreach ($NomShortID in get-content ShortIDliste.csv)\" mais ne retourne plus rien avec foreach. Une idée? Je dois absolument automatiser ce script (tellement simple en batch)[code:1]for /F \"eol=; tokens=1,2,3* delims=;\" %%a in (ShortIDliste.csv) do (
....
....
....
)[/code:1]Please help !!!
Jeel<br><br>Message édité par: Arnaud, à: 11/03/10 09:04
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 16 ans 1 semaine #6335
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Récup propriété d'un compte AD à partir d'1 liste
Bonjour Jeeloo,
Je pense que l'import de ton fichier CSV ne fonctionne pas.
Par défaut Import-CSV attend comme séparateur de champs le caractère virgule. Si tu as autre chose comme séparateur, utilise le paramètre -Delimiter de Import-CSV. Mais attention, ce paramètre n'est disponible qu'en version 2 de PowerShell.
Si le problème persiste, merci de poster un exemple de ton fichier CSV.
Arnaud
Je pense que l'import de ton fichier CSV ne fonctionne pas.
Par défaut Import-CSV attend comme séparateur de champs le caractère virgule. Si tu as autre chose comme séparateur, utilise le paramètre -Delimiter de Import-CSV. Mais attention, ce paramètre n'est disponible qu'en version 2 de PowerShell.
Si le problème persiste, merci de poster un exemple de ton fichier CSV.
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Jeel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 58
- Remerciements reçus 0
il y a 16 ans 1 semaine #6339
par Jeel
Réponse de Jeel sur le sujet Re:Récup propriété d'un compte AD à partir d'1 liste
Ouf, MERCI Arnaud, je désespérais: c'est la 1ère fois que mon poste reste sans réponse pendant si longtemps !!!
J'ai cherché mais rien. Mon fichier d'entrée à été renommé en txt puisque ne contient que le shortID par ligne. Le résultat est le même pourtant quand je n'affiche que la variable \"$NomShortID\", toute la liste s'affiche.
J'estime que c'est suffisant pour que je puis y faire des traitements. Je ne comprends pas. J'ai pourtant lu une bonne partie du livre.
Une petite question: En PowerShell, peux-t-on, à partir d'une liste de ShortID, faire des traitements? Ainsi, je suis fixé pour ne pas chercher pour rien et me tourner vers d'autre language comme le vbs .
Merci
Jeel
J'ai cherché mais rien. Mon fichier d'entrée à été renommé en txt puisque ne contient que le shortID par ligne. Le résultat est le même pourtant quand je n'affiche que la variable \"$NomShortID\", toute la liste s'affiche.
J'estime que c'est suffisant pour que je puis y faire des traitements. Je ne comprends pas. J'ai pourtant lu une bonne partie du livre.
Une petite question: En PowerShell, peux-t-on, à partir d'une liste de ShortID, faire des traitements? Ainsi, je suis fixé pour ne pas chercher pour rien et me tourner vers d'autre language comme le vbs .
Merci
Jeel
Connexion ou Créer un compte pour participer à la conversation.
- Jeel
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 58
- Remerciements reçus 0
il y a 16 ans 1 semaine #6340
par Jeel
Réponse de Jeel sur le sujet Re:Récup propriété d'un compte AD à partir d'1 liste
Ah, enfin j'ai trouvé; tellement banal que personne n'a voulu m'aider !!!
(sauf Arnaud)
[code:1]foreach ($NomCN in get-content ShortIDliste.txt) {
$NomCNPath = 'LDAP://CN='+$NomCN+',OU=Accounts,DC=domain,DC=com'
# ici traitement voulu ....
$ObjtUser=[ADSI]$NomCNPath
$Objtuser.psbase.invokeSet('AccountDisabled',$true)
$ObjtUser.Setinfo()}
[/code:1]
et cela fonctionne.
Jeel<br><br>Message édité par: jeelou2000, à: 10/03/10 23:45
[code:1]foreach ($NomCN in get-content ShortIDliste.txt) {
$NomCNPath = 'LDAP://CN='+$NomCN+',OU=Accounts,DC=domain,DC=com'
# ici traitement voulu ....
$ObjtUser=[ADSI]$NomCNPath
$Objtuser.psbase.invokeSet('AccountDisabled',$true)
$ObjtUser.Setinfo()}
[/code:1]
et cela fonctionne.
Jeel<br><br>Message édité par: jeelou2000, à: 10/03/10 23:45
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 16 ans 1 semaine #6341
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Récup propriété d'un compte AD à partir d'1 liste
Salut Jeel,
Tu m'as devancé et tu as fini par trouver toute seule...
Effectivement tu m'as induit en erreur car tu souhaitais à la base importer un fichier CSV et qui dit fichier CSV dit entête et valeurs séparées par des virgules (ou autres). Or ton fichier n'est pas un fichier CSV valide mais simplement un fichier texte dans lequel les valeurs sont les unes à la suite des autres.
Dans ce cas, et tu l'as trouvé, un simple Get-Content suffit.
Exemple :
[code:1]
$TbValeurs = Get-Content C:\temp\liste.txt
[/code:1]
En faisant cela, j'obtiens un tableau d'objets de type String dans ma variable $TbValeurs. Le premier élément de mon tableau étant la première ligne de mon fichier texte et ainsi de suite.
Par conséquent si j'utilise un ForEach je vais pouvoir facilement parcourir tous les éléments de mon tableau.
[code:1]
Foreach ($valeur in $TbValeurs)
{
...
# je peux utiliser la variable $valeur dans
# ce bloc de script et celle-ci correspondra
# à chacune des valeurs du tableau $TbValeurs
}
[/code:1]
Arnaud
Tu m'as devancé et tu as fini par trouver toute seule...
Effectivement tu m'as induit en erreur car tu souhaitais à la base importer un fichier CSV et qui dit fichier CSV dit entête et valeurs séparées par des virgules (ou autres). Or ton fichier n'est pas un fichier CSV valide mais simplement un fichier texte dans lequel les valeurs sont les unes à la suite des autres.
Dans ce cas, et tu l'as trouvé, un simple Get-Content suffit.
Exemple :
[code:1]
$TbValeurs = Get-Content C:\temp\liste.txt
[/code:1]
En faisant cela, j'obtiens un tableau d'objets de type String dans ma variable $TbValeurs. Le premier élément de mon tableau étant la première ligne de mon fichier texte et ainsi de suite.
Par conséquent si j'utilise un ForEach je vais pouvoir facilement parcourir tous les éléments de mon tableau.
[code:1]
Foreach ($valeur in $TbValeurs)
{
...
# je peux utiliser la variable $valeur dans
# ce bloc de script et celle-ci correspondra
# à chacune des valeurs du tableau $TbValeurs
}
[/code:1]
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 16 ans 1 semaine #6342
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Récup propriété d'un compte AD à partir d'1 liste
Une dernière remarque au passage concernant la concaténation de ta chaine, tu aurais pu aussi utiliser la syntaxe suivante :
[code:1]
$NomCNPath=\"LDAP://CN=$NomCN,OU=Accounts,DC=domain,DC=com\"
[/code:1]
Ca revient au même, mais pour ma part je préfère cette forme. Les goûts et les couleurs...
Arnaud
[code:1]
$NomCNPath=\"LDAP://CN=$NomCN,OU=Accounts,DC=domain,DC=com\"
[/code:1]
Ca revient au même, mais pour ma part je préfère cette forme. Les goûts et les couleurs...
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
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
- [Résolu]Import de données à partir d'un fich texte