Question
probleme lié a un import csv
- darphboubou
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 135
- Remerciements reçus 0
bon pour en revenir à mon sujet, je fais un script pour désactiver et par la suite supprimer des comptes AD
Dans un premier temps lors de la désactivation du compte AD, je mets à jour un fichier CSV. Jusque là tout va bien.
Par contre à la suppression du compte, je me sert de ce même fichier CSV pour récupérer la date de désactivation afin de la comparer à la date du jour.
Je détermine donc ainsi, si le compte est désactiver depuis plus de 180 jours. Si c'est le cas le compte sera supprimé.
Mais voila aprés l'import je me retrouve avec des valeurs bonnes mais mal formatés.
Exemple de fichier csv d'origine
Voici le code
[code:1]#Declaration fonction pause
function Pause ($Message=\"Press any key to continue...\"«»)
{
Write-Host -NoNewLine $Message
$null = $Host.UI.RawUI.ReadKey(\"NoEcho,IncludeKeyDown\"«»)
Write-Host \"\"
}
#Debut programme
Do {
Write-Host \"`nAD `nDesactivation `n1: Désactivation compte AD `n2: Suppression Compte AD `n\"
Write-Host \"`nChoix:\" -ForegroundColor Green
$a=Read-Host
switch ($a)
{
#Desactivation du compte AD
1 {
Write-Host \"Donner le nom du user a desactiver\"
$nom=Read-Host
#Obtention des informations necessaires pour le fichier csv
$date=Get-Date -uFormat %m/%d/%Y
$disa=(Get-QADUser $nom).AccountIsDisabled
$name=(Get-QADUser $nom).name
$lname=(Get-QADUser $nom).lastname
$fname=(Get-QADUser $nom).firstname
#MAJ fichier csv des comptes AD desactivés
\"$name\"+\",\"+\"$lname\"+\",\"+\"$fname\"+\",\"+\"$date\" | Out-File C:\temp\disabled.csv -Append
Set-QADUser $name -Description \"compte désactivé le $date\"
Disable-QADuser $name
Invoke-Item C:\temp\disabled.csv
}
2 {
Import-Csv \"c:\temp\Disabled.csv\" | Foreach ($_.name) {
$avant = $_.Desactivation
$dateduj=Get-Date -uFormat %m/%d/%Y
$since=(Get-Date $dateduj)-(Get-Date $avant)
#Determination du nombres de jours ou les comptes AD sont desactivés
$since1=($since).days
#Suppression des comptes desactivés depuis plus de 180 jours
if ($since1 -ge 0)
{
$name=(Get-QADUser $_.name).name
$date=Get-Date -uFormat %m/%d/%Y
\"$name\"+\",\"+\"$date\" | Out-File \"c:\temp\to deleted.csv\" -Append
Remove-QADObject $name
}
}
}
}
Write-Host \"Voulez-vous continuer O (Oui) N (Non)\"
$ans=Read-Host
}While ($ans -ne \"N\"«»)
[/code:1]
et voici ce que j'obtients lors de l'import de la valeur desactivation de mon fichier CSV (idem pour les valeurs name,desactivation ...)
s a f c o 6 6 6 (il y a comme des sortes d'espace) au lieu de safco666
du coup mes différentes manipulations pour supprimer les comptes échouent.
Pourquoi les informations contenues dans le fichier CSV ne reste pas sous leurs formes d'origine.
Par contre si je fais des modification dans le fichier csv manuellement par exemple modifier un caractère sur n'importe cellule, comme par miracle le contenu du fichier redevient exploitable dans sa totalité.
Fermer cette fenêtre
Connexion ou Créer un compte pour participer à la conversation.
- heshima
- Hors Ligne
- Nouveau membre
-
- Messages : 7
- Remerciements reçus 0
et j'ai eu ma réponse dans ton message. Donc on est collègue XD.
Connexion ou Créer un compte pour participer à la conversation.
- darphboubou
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 135
- Remerciements reçus 0
name lastname firstname desactivation
safco666DEVIL Maycry 1/22/2013
safco24 Quaterman Alan 1/22/2013
safco25 Indiana Jones 1/22/2013
Connexion ou Créer un compte pour participer à la conversation.
- darphboubou
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 135
- Remerciements reçus 0
c'est dommage je trouve pas le MP.
et j'ai eu ma réponse dans ton message. Donc on est collègue XD.
Nous fûmes
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
Comme l'indiquais Laurent :
Laurent Dardenne écrit:
Salut,
je ne comprend pas la syntaxe de l'appel foreach.
[code:1]Import-Csv \"c:\temp\Disabled.csv\" | Foreach ($_.name) {[/code:1]
Tu persistes et signes avec cette écriture mais elle n'est pas bonne.
Lorsqu'utilisé avec le pipeline, il ne s'agit pas d'un foreach, une boucle, mais de la Cmdlet Foreach-Object.
Voir l'aide (notamment les exemples) :
Get-Help Foreach-Object
Get-Help Foreach-Object -Detailled
Get-Help Foreach-Object -Full
Get-Help Foreach-Object -Examples
Get-Help Foreach-Object -Online
Aussi, s'il s'agissait d'un 'foreach' :
[code:1]foreach($element in $MaCollection){
# Traitement sur $element
}[/code:1]
... et dans ce cas, il ne s'agit plus de la Cmdlet 'Foreach-Object'.
[code:1]
get-help about_foreach
[/code:1]
...
Instruction Foreach dans un pipeline de commande Lorsqu'une instruction
Foreach apparaît dans un pipeline de commande, Windows PowerShell
utilise l'alias foreach, qui appelle la commande ForEach-Object.
Lorsque vous employez l'alias foreach dans un pipeline de commande,
vous n'incluez pas la syntaxe ($<élément> in $<collection>) de la
même manière qu'avec l'instruction Foreach. En effet, la commande
antérieure dans le pipeline fournit cette information. Lorsque
l'alias foreach est utilisé dans un pipeline de commande,
sa syntaxe se présente comme suit :
<commande> | foreach {<bloc_commandes>}
...
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 22/01/13 12:22
Connexion ou Créer un compte pour participer à la conversation.
- darphboubou
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 135
- Remerciements reçus 0
En résumé ce que je cherche a faire
C'est que pour chaque nom de mon fichier CSV (safco666, safco24, safco25...) récupérer les deux informations suivantes le nom (colonne name) la date de désactivation (colonne désactvation). Afin de traiter les compte AD désactiver depuis plus de 180 jour et donc de les supprimer de l'AD
Et la je dois avouer que je suis perdu
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- probleme lié a un import csv