IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Supprimer contenu de dossier en fonction d'une liste donnée


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2013
    Messages : 94
    Points : 47
    Points
    47
    Par défaut Supprimer contenu de dossier en fonction d'une liste donnée
    Bonjour,

    Je dois supprimer le dossiers d'utilisateurs qui ne sont plus présent.

    Ma première idée est de lire un fichier.txt avec les identifiants à supprimer ensuite les dossiers sont effacés.

    $dosEffacer= "C:\Users\hacbao\Desktop\test\IDaEffacer\"
    $user= (get-content -path "C:\Users\hacbao\Desktop\test\liste.txt")

    $user | Remove-Item -path $dosEffacer -Recurse -WhatIf
    Pouvez-vous m'aider ?


    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2013
    Messages : 94
    Points : 47
    Points
    47
    Par défaut
    quelqu'un a-t'il une piste à me donner ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    Il te manque que le foreach pour parcourir chacun des éléments contenu dans ta variable $user et d'exécuter la commande adéquate.
    Si tu as besoin d'aide pour utiliser cette instruction, tu peux faire une recherche avec les mots suivants: Powershell foreach

    Salutations.

  4. #4
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2013
    Messages : 94
    Points : 47
    Points
    47
    Par défaut
    Merci pour cette première réponse. J'ai essayé plein d'autres façon pour faire fonctionner mon script à chaque fois j'ai un message d'erreur exemple ci-dessous.

    Qu'est qui faut utiliser foreach ou foreach-object ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ForEach : Impossible de résoudre le nom d’entrée «*Remove-Item*» dans une méthode.
    Au caractère C:\Users\administrateur\Desktop\sup dos user.ps1:6 : 10
    + $liste | ForEach Remove-Item -path $dosEffacer -Recurse -WhatIf
    +          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument : (dossier_A:PSObject) [ForEach-Object], PSArgumentException
        + FullyQualifiedErrorId : MethodNotFound,Microsoft.PowerShell.Commands.ForEachObjectCommand
     
    ForEach : Impossible de résoudre le nom d’entrée «*Remove-Item*» dans une méthode.
    Au caractère C:\Users\administrateur\Desktop\sup dos user.ps1:6 : 10
    + $liste | ForEach Remove-Item -path $dosEffacer -Recurse -WhatIf
    +          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument : (dossier_B:PSObject) [ForEach-Object], PSArgumentException
        + FullyQualifiedErrorId : MethodNotFound,Microsoft.PowerShell.Commands.ForEachObjectCommand

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    Oui, mais non ...

    L'instruction foreach définit un bloque de code qui devra être répéter au temps de fois que d'éléments itérables.
    Ton instruction doit être dans le bloque de code de la boucle foreach. As-tu consulté la documentation au sujet de cette instruction ?

    Exemple avec un tableau de chaînes de caractères à afficher:
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $myArray=@('Bonjour', 'Bienvenu', 'Au revoir')
    foreach ($str in $myArray) {
        Write-Host -Object $str
    }

    Il te suffit maintenant de parcourir ton tableau définit dans ta variable $user, puis de compléter ton chemin avec la variable $dosEffacer et la valeur itérée.
    Je te conseil dans un premier temps d'afficher le résultat de la concaténation de la chaîne de caractères, puis de remplacer l'instruction Write-Host par l'instruction Remove-Item.

    N'oublie pas de consulter l'aide en ligne pour l'instruction Remove-Item (commande: help <instruction>).

    Pour concaténer deux chaînes de caractères, tu peux utiliser l'une des méthodes suivantes:
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $newStr = ($dosEffacer + $str)
    $newStr = "$($dosEffacer)$($str)"
    $newStr = "{0}{1}" -f $dosEffacer, $str #Attention, si des accolades sont utilisées dans la chaîne, elles devront être doublées!

    Salutations.
    PS: Pour mieux comprendre la différence entre foreach et ForEach-Object, je te conseil cet article sur StackOverflow: https://stackoverflow.com/questions/...-in-powershell

  6. #6
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2013
    Messages : 94
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    J'ai lu les docs des commandes.

    j'ai revue le script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    $objet= "C:\Users\admin\Desktop\remove-dossier\TEST-SUP\"
    
    $liste= (cat "C:\Users\admin\Desktop\remove-dossier\supression_dossier_test.txt")
    
    ForEach ( $objet in $liste) {
    
    Write-Host $liste
    }
    j’obtiens en résultat autant de dossier plutôt que d'avoir la liste, est-ce que je suis sur la bonne voie ?
    dossier_A dossier_B dossier_C dossier_D dossier_E
    dossier_A dossier_B dossier_C dossier_D dossier_E
    dossier_A dossier_B dossier_C dossier_D dossier_E
    dossier_A dossier_B dossier_C dossier_D dossier_E
    dossier_A dossier_B dossier_C dossier_D dossier_E
    dossier_A dossier_B dossier_C dossier_D dossier_E

    Si je mets Remove-Item -Path $objet -Recurse -WhatIf

    j'ai la réponses suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Remove-Item : Impossible de lier l'argument au paramètre «*Path*», car il s'agit d'une chaîne vide.
    Au caractère C:\Users\administrateur\Desktop\sup dos userV2.ps1:10 : 13
    + Remove-Item $objet -Recurse -WhatIf
    +             ~~~~~~
        + CategoryInfo          : InvalidData : (:) [Remove-Item], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.RemoveItemCommand

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    Heu sans vouloir être méchant, as-tu compris ce que tu as lu ?

    La ligne suivante assigne à la variable "$objet" la chaîne de caractères: "C:\Users\admin\Desktop\remove-dossier\TEST-SUP\"
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet= "C:\Users\admin\Desktop\remove-dossier\TEST-SUP\"

    Et quelques ligne plus loin, l'instruction assignera les différentes valeurs contenue dans la variable "$liste" à ta variable "$objet" (attention à la portée des variables):
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    ForEach ( $objet in $liste) {

    Et enfin à la ligne suivante tu affiches à chaque fois le contenu de la variable "$liste" au lieu et place de la variable "objet" qui est modifié à chaque itération de la boucle ...

    Je pense que tu comprendra aisément les erreurs de ton écriture ...

    Voici un exemple qui affichera le contenu d'une chaîne de caractère concaténée avec le contenu des lignes d'un fichier.
    Le contenu du fichier exemple.txt, est uniquement une suite de nombres, un par ligne.
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Get-Content -Path .\exemple.txt
    1
    2
    3
    4
    5

    Puis le script qui réalise cette opération (exemple.ps1):
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $myString = "Ligne numéro:"
    foreach ($line in (Get-Content -Path .\exemple.txt)) {
        Write-Host -Object "$($myString) $($line)" # Attention, j'ai séparé les deux variables par un espace!
    }

    Résultat de l'exécution de ces instructions:
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    .\exemple.ps1
    Ligne numéro: 1
    Ligne numéro: 2
    Ligne numéro: 3
    Ligne numéro: 4
    Ligne numéro: 5

    Inspire toi de cet exemple pour réaliser ton script.
    Attention avec la commande Remove-Item, tu devras peut-être utiliser le paramètre -Force (consulte la documentation)

    Avec google, il te suffit de rechercher le nom de ta commande pour obtenir l'aide en ligne de MSDN.

    Salutations.
    PS: cat est un alias de la commande Get-Content.

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2013
    Messages : 94
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup pour votre aide

    Les commandes je l'ai lu et relu et cherché de l'exemple, en tant que tel elles ne posent pas de problèmes particulier mais plutôt le jonglage de syntaxe. Il y a plein de notion qui ne encore acquise.
    Je continue de persévérer dans l'apprentissage du scripting.

Discussions similaires

  1. [Batch] Supprimer de fichier .pdf dans un dossier zippé à partir d'une liste
    Par Gardel dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 09/11/2010, 12h35
  2. Réponses: 5
    Dernier message: 04/03/2009, 10h39
  3. Créer ou modifier un dossier en fonction d'une valeur dans une cellule
    Par Pierre.g dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/08/2008, 17h37
  4. Réponses: 7
    Dernier message: 17/11/2007, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo