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 :

Lister les dossiers créés ou modifiés depuis une date [Batch]


Sujet :

Scripts/Batch

  1. #21
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Tu peux aussi mettre à jour Powershell.
    Pour connaitre la version, dans la console Powerhsell tape
    Code powerhsell : Sélectionner tout - Visualiser dans une fenêtre à part
    $PSVersionTable.PSVersion.ToString()

    D'ailleurs quel est ton os ?

  2. #22
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Suite à tes conseils, je viens d'installer PowerShell 3.0 (j'étais en 2.0).
    Maintenant, l'option -LiteralPath fonctionne !
    J'ai ainsi pu exécuter cette commande avec "presque" succès :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\"| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\expo.txt" -NoTypeInformation
    Le "presque" vient du fait que seul les dossiers à la racine du chemin (\\serveur-sig\SIG\[ADMIN_SIG]) sont scannés, pas les sous-dossiers.
    Y a-t-il une option pour ajouter les sous-dossiers de manière récursive ?

    Citation Envoyé par ericlm128
    D'ailleurs quel est ton os ?
    Je suis sur un poste Windows 7 Pro (64bit) pour mes tests, mais dès que ça marche, je lancerai le script depuis un serveur Windows Server 2008 (via tâche planifiée).
    (faudra que je vois avec l'administrateur du serveur si on peut mettre à jour et si l’exécution de script powershell (Set-ExecutionPolicy Unrestricted) ne pose pas de souci sur le serveur)

  3. #23
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    "Get-ChildItem" possède un paramètre "-Recurse" pour scanner les sous-dossier.

    Il faudra vérifier la version de Powershell sur ton Server 2008.

    Powershell possède un paramètre pour s'affranchir de la politique de sécurité pour un script
    PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1
    https://blog.netspi.com/15-ways-to-b...cution-policy/
    http://9to5it.com/bypass-the-powersh...cution-policy/

  4. #24
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Citation Envoyé par ericlm128
    "Get-ChildItem" possède un paramètre "-Recurse" pour scanner les sous-dossier.
    Je viens de l'ajouter à la commande, et maintenant le fichier d'export est vide !?
    J'ai essayé ces toutes ces variantes, rien ne marche :

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # le script qui marche (mais sans les sous-dossiers) :
    Get-ChildItem -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\" | Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\export.csv" -NoTypeInformation
     
    # avec -Recurse [ne marche pas]
    Get-ChildItem -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\" -Recurse | Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\export.csv" -NoTypeInformation
     
    # avec -Recurse -Force [ne marche pas]
    Get-ChildItem -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\" -Recurse -Force | Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\export.csv" -NoTypeInformation
     
    # avec -Recurse au début [ne marche pas]
    Get-ChildItem -Recurse -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\" | Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\export.csv" -NoTypeInformation

    Qu'est-ce que je n'écris pas comme il faut ?

  5. #25
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    La deuxième solution fonctionne correctement chez moi.
    Je suis sous Windows 7 64 bits intégrale et Powershell 3.0, autrement dit quasiment comme toi.


    Tu n'a peut être pas de dossier (sous-dossier) modifiés dans les 10 derniers jours ?
    Peut être que tu n'a pas accès à toute l'arborescence des sous-dossier (problème de droits d'accès dans un dossier).
    Peut être que ton fichier expo.csv était verrouillé par un autre process ? (Excel ...). Ou que tu n'a pas les droits d'écritures sur cette ressource ?

    Tu as un message d'erreur ?

    Voici ce que je lance (# pour commenter ce qui suis)
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $rep = "." #\\serveur-sig\SIG\[ADMIN_SIG]\"
    Get-ChildItem -LiteralPath $rep -Recurse | Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "$rep\export.csv" -NoTypeInformation

  6. #26
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Bonjour, et désolé pour ce silence (je suis passé sur d'autres sujets entre temps)

    Tu n'a peut être pas de dossier (sous-dossier) modifiés dans les 10 derniers jours ?
    Si si, j'en ai (je suis sur un dossiers de tests, et j'ai créé des sous-dossiers aujourd'hui, avec des fichiers textes dedans pour tests).

    Peut être que tu n'a pas accès à toute l'arborescence des sous-dossier (problème de droits d'accès dans un dossier).
    Je suis connecté en tant qu'administrateur sur la machine, ainsi que sur le serveur...
    Et j'ai bien les droits complets sur les dossiers scannés...


    Mais je viens de me rendre compte d'un problème : quand j’exécute le script avec le paramètre "-Recurse", celui-ci ne s'arrête pas ! (le bouton "arrêter l’exécution" reste rouge)
    Mais je n'ai pas de message d'erreur.
    Le fichier est créé tout de suite, mais l'execution du script reste bloquée.

    Y a-t-il une console qui permet de savoir sur quoi bloque le fichier ?

    Je viens de lancer la même commande sur un dossier local, et là, ça fonctionne :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $rep = "C:\Users\Sylvain\Desktop" #\\serveur-sig\SIG\[ADMIN_SIG]\"
    Get-ChildItem -LiteralPath $rep -Recurse | Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "C:\Users\Sylvain\Desktop\export.txt" -NoTypeInformation

    ??

  7. #27
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    en complément, ce script se lance bien et se termine avec succès :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $rep = "C:\Users\Sylvain\Desktop" #\\serveur-sig\SIG\[ADMIN_SIG]\"
    Get-ChildItem -LiteralPath $rep -Recurse | Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "\\serveur-sig\SIG\[ADMIN_SIG]\export.txt" -NoTypeInformation
    Ce srcipt scanne un dossier local, mais écrit sur le serveur.
    Donc, c'est le scan qui pose problème, pas l'écriture.

  8. #28
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Oui mais ... du coup ... ton dossier "\\serveur-sig\SIG\[ADMIN_SIG]\" n'aurait pas des milliers/millions de dossiers/fichiers par hasard ? Ce qui pourrait justifier la lenteur, pacque ça n'a pas l'air planté mais juste lent ?

  9. #29
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Non non, ça reste "raisonnable" :
    \\serveur-sig\SIG\[ADMIN_SIG] : 429 Fichiers, 137 Dossiers

    Pour comparaison :
    C:\Users\Sylvain\Desktop : 4740 Fichiers, 380 Dossiers
    (et l'execution du scan ne prend qu'une seconde ou 2)

  10. #30
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Oui ça reste raisonnable. Mais il est difficile de comparer des temps de réponse entre des ressources locales et distantes.
    Pour ma part j'ai tenter sur une de nos ressource serveur. 449 fichier/190 dossiers ça met 1 à 2 secondes.

    Tu peut lancer le script à partir d'un autre poste ? Directement depuis le serveur ?

  11. #31
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2017
    Messages : 12
    Par défaut
    Essaie avec la commande forfiles :
    https://technet.microsoft.com/fr-fr/...(v=ws.10).aspx
    en executant la commande "echo @relpath" dans le paramètres /c

    J'espère que ça pourra t'aider

  12. #32
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Citation Envoyé par BlueBuru
    Essaie avec la commande forfiles
    Merci de ta proposition, mais nous avons essayé et le filtre par date ("/D -10") ne semble pas fonctionner...
    Voici le code proposé par Eric :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    set outfile=%~dp0outfile.txt
    echo CHEMIN;DATE_MODIF>%outfile%
    forfiles /S /D -10 /C "cmd /c If @isdir==TRUE echo @path;@fdate>>%outfile%"
    Qui me récupère étrangement tous les dossier, et non uniquement ceux modifiés depuis 10 jours...

  13. #33
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Bonjour,
    Désolé de ne revenir qu'aujourd'hui sur ce post, mais j'étais appelé sur d'autres priorités.
    Citation Envoyé par ericlm128
    Tu peux lancer le script à partir d'un autre poste ? Directement depuis le serveur ?
    Je viens de le faire, après avoir mis à jour Powershell (3.0).
    Malheureusement, le fichier d'export reste désespérément vide après ce code :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Get-ChildItem -LiteralPath "C:\SIG\[ADMIN_SIG]\" -Recurse| Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "C:\SIG\[ADMIN_SIG]\expo.txt" -NoTypeInformation
    Idem avec celui-ci :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $rep = "C:\SIG\[ADMIN_SIG]\"
    Get-ChildItem -LiteralPath $rep -Recurse | Where-Object {$_.PSIsContainer -eq $true -and $_.LastWriteTime -ge (Get-Date).AddDays(-10)} | Select-Object FullName, CreationTime, LastWriteTime | Export-Csv -Delimiter ";" -LiteralPath "C:\SIG\[ADMIN_SIG]\export.txt" -NoTypeInformation
    Si vous avez une idée de la cause...

  14. #34
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Je me permets de relancer cette discussion, car je ne suis pas parvenu à mes fins depuis ces échanges de 2017.

    Mes besoins ont quelque peu évolué depuis, mais la demande reste globalement la même, à savoir : lister les répertoires et fichiers d'un dossier (en fait, tout un serveur), avec les informations de dates (création, modification, accès), de poids et de chemin.

    Je ne souhaite plus filtrer par date le résultat, car l'objectif est d'importer ce listing dans une base de données (PostGreSQL), sur laquelle je fais des requêtes d'analyses.

    Le script BATCH de cette discussion a bien fonctionné, mais a mis plus d'une semaine à s’exécuter...

    J'ai entre temps découvert Locate32 (https://locate32.cogit.net/), qui fait ce job en quelques minutes sur mon serveur !!
    Malheureusement, la base de données de Locate32 est au format Binaire, et je ne sais pas comment l'utiliser dans un format tabulaire (puisque l'objectif final est une table PostGreSQL).
    (j'ai posé une question à ce sujet sur leur forum)

    Entre BATCH ou POWERSHELL, je n'ai pas de préférence : pourvu que ça marche, et que ça prenne moins d'une journée de scan !

    Merci pour votre aide !

    Sylvain M.

  15. #35
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Et bien après avoir survoler le post je reprend la même idée qui fonctionne toujours chez moi

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $rep = "C:\"
    $outfile = "C:\out.csv"
     
    Get-ChildItem -LiteralPath $rep -Recurse -ErrorAction SilentlyContinue | Select-Object FullName, Length, CreationTime, LastWriteTime, LastAccessTime | Export-Csv -Delimiter ";" -LiteralPath $outfile -NoTypeInformation

  16. #36
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Citation Envoyé par ericlm128
    Et bien après avoir survoler le post je reprend la même idée qui fonctionne toujours chez moi
    Oui, je viens de tester sur mon PC, et ça fonctionne du tonnerre !!!

    J'allais ensuite t'écrire que, malheureusement, ça ne fonctionnait pas sur mon serveur... sniff

    Mais j'ai enfin identifié le problème : le chemin du répertoire à scanner comportait les caractères [ et ].
    Et c'est finalement ce qui faisait planter le script (j'obtenais un fichier CSV vide).

    Du coup, je lance dès ce soir le scan du serveur complet : je verrai demain combien de temps il aura mis pour scanner tout le serveur !

    MERCI !!!

  17. #37
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Le scan est en cours, mais en regardant le contenu du fichier CSV généré (sur un copie pour ne pas influencer l'écriture en cours), je constate que les accents ne sont pas bien gérés dans les chemins : ils sont remplacés par des points d'interrogation.

    As-tu une idée pour ce point précis ?

    A demain pour la suite !

  18. #38
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 222
    Par défaut
    Oui tout à fait, ceci est du à l'encodage tu fichier tu peux essayer comme ceci en UTF8


    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $rep = "C:\"
    $outfile = "C:\out.csv"
     
    Get-ChildItem -LiteralPath $rep -Recurse -ErrorAction SilentlyContinue | Select-Object FullName, Length, CreationTime, LastWriteTime, LastAccessTime | Export-Csv -Delimiter ";" -LiteralPath $outfile -NoTypeInformation -Encoding UTF8

  19. #39
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Citation Envoyé par SylvainM
    Du coup, je lance dès ce soir le scan du serveur complet : je verrai demain combien de temps il aura mis pour scanner tout le serveur !
    Incroyable : le scan s'est terminé hier au bout de 20 min (contre, je le rappelle, plus d'une semaine avec la version Batch). Trop fort, Powershell !!!
    (et en fait, il y a 1 274 272 fichiers et dossiers !!!! )

    Pour ce qui est du problème d'encodage, le paramètre proposé fonctionne parfaitement !

    Mon problème est donc 100% résolu cette fois : merci ericlm128

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [AC-2007] Lister les requêtes contenant un critère sur une date
    Par Beren69 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/12/2012, 21h53
  2. recuperer les objets créés en fonction d'une date
    Par decksroy dans le forum Toad
    Réponses: 1
    Dernier message: 22/02/2008, 10h45
  3. Trouver les fichiers modifiés depuis une date/heure précise
    Par sinok dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 18/07/2006, 17h56
  4. |VB6] Comment Lister les liens vers des fichiers d'une page web
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2005, 18h17
  5. Réponses: 4
    Dernier message: 16/09/2003, 10h51

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