Question [Résolu]Import de données à partir d'un fich texte

Plus d'informations
il y a 16 ans 2 semaines #6314 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

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

Plus d'informations
il y a 16 ans 1 semaine #6335 par Arnaud Petitjean
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

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.

Plus d'informations
il y a 16 ans 1 semaine #6339 par Jeel
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 \&quot;$NomShortID\&quot;, 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.

Plus d'informations
il y a 16 ans 1 semaine #6340 par Jeel
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

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

Plus d'informations
il y a 16 ans 1 semaine #6341 par Arnaud Petitjean
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

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.

Plus d'informations
il y a 16 ans 1 semaine #6342 par Arnaud Petitjean
Une dernière remarque au passage concernant la concaténation de ta chaine, tu aurais pu aussi utiliser la syntaxe suivante :

[code:1]
$NomCNPath=\&quot;LDAP://CN=$NomCN,OU=Accounts,DC=domain,DC=com\&quot;
[/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
Propulsé par Kunena