none
Filtrer les fichiers par extension RRS feed

  • Question

  • Bonjour tout le monde,

    À la place de ceci :

    $l = Get-ChildItem;

    forEach($f in $l) { if($f.Extension -ne ".exe") {$f.Name, $f.Extension}}

    est-il possible d'utiliser Where-Object pour exprimer ça plus sobrement ?


    • Modifié Gloops lundi 22 mars 2021 05:08
    lundi 22 mars 2021 05:05

Réponses

  • bonjour Gloops

    tes 2 dernières sont techniquement valides, juste une légère erreur de syntaxe.Mais tu vas la trouver tout seul, laisses-moi juste te poser une question : "Dis-moi Gloops, est-ce que *.exe est une extension ? Tu es sur ? Vérifies sur un fichier ( avec get-item)." Ca y est, tu vois ou je veux en venir ? :-\

    Ta première expression correspond à l'utilisation du paramètre -FilterScript de manière implicite.

    Ta seconde à -Property toujours de manière implicite.

    Mais, il y a plus simple encore ... et je ne le répèterais jamais assez :-) "Filter Left, format right"

    $MonPath = "c:\temp"

    Get-ChildItem $MonPath -Exclude *.txt

    266 fichiers dans mon Temp, dont 72 .txt, et la si je compte je n'en ai plus que 194 qui ne sont pas .txt

    Attention : n'oublies pas que Get-ChildItem te retournes seulement les objets du 1er niveau, pas oublier le -Recurse ou -Depth si nécessaire.

    Cordialement

    Olivier

    • Marqué comme réponse Gloops lundi 22 mars 2021 14:52
    lundi 22 mars 2021 14:40
  • Ah mais oui, j'avais tapé ça :

     Get-ChildItem | Where-Object {$_.extension -ne "*.exe"}

    et ça ne filtrait pas, mais il aurait mieux valu taper simplement ça :

    Get-ChildItem | Where-Object Extension -ne ".exe"

    • Marqué comme réponse Gloops lundi 22 mars 2021 05:16
    lundi 22 mars 2021 05:15

Toutes les réponses

  • Ah mais oui, j'avais tapé ça :

     Get-ChildItem | Where-Object {$_.extension -ne "*.exe"}

    et ça ne filtrait pas, mais il aurait mieux valu taper simplement ça :

    Get-ChildItem | Where-Object Extension -ne ".exe"

    • Marqué comme réponse Gloops lundi 22 mars 2021 05:16
    lundi 22 mars 2021 05:15
  • bonjour Gloops

    tes 2 dernières sont techniquement valides, juste une légère erreur de syntaxe.Mais tu vas la trouver tout seul, laisses-moi juste te poser une question : "Dis-moi Gloops, est-ce que *.exe est une extension ? Tu es sur ? Vérifies sur un fichier ( avec get-item)." Ca y est, tu vois ou je veux en venir ? :-\

    Ta première expression correspond à l'utilisation du paramètre -FilterScript de manière implicite.

    Ta seconde à -Property toujours de manière implicite.

    Mais, il y a plus simple encore ... et je ne le répèterais jamais assez :-) "Filter Left, format right"

    $MonPath = "c:\temp"

    Get-ChildItem $MonPath -Exclude *.txt

    266 fichiers dans mon Temp, dont 72 .txt, et la si je compte je n'en ai plus que 194 qui ne sont pas .txt

    Attention : n'oublies pas que Get-ChildItem te retournes seulement les objets du 1er niveau, pas oublier le -Recurse ou -Depth si nécessaire.

    Cordialement

    Olivier

    • Marqué comme réponse Gloops lundi 22 mars 2021 14:52
    lundi 22 mars 2021 14:40
  • bonjour Gloops

    tes 2 dernières sont techniquement valides, juste une légère erreur de syntaxe.Mais tu vas la trouver tout seul, laisses-moi juste te poser une question : "Dis-moi Gloops, est-ce que *.exe est une extension ? Tu es sur ? Vérifies sur un fichier ( avec get-item)." Ca y est, tu vois ou je veux en venir ? :-\

    Ah oui je l'ai vu ça, sinon dans la question en haut la syntaxe n'aurait pas été correcte, mais quand il s'est agi de copier, j'ai copié de trop haut dans l'historique. Ben oui, c'est ballot ...

    Ta première expression correspond à l'utilisation du paramètre -FilterScript de manière implicite.

    Ta seconde à -Property toujours de manière implicite.

    Il faudra que je réessaye, il m'a semblé que ça marchait mieux sans mettre -Property. Ça m'a surpris d'ailleurs.

    Mais, il y a plus simple encore ... et je ne le répèterais jamais assez :-) "Filter Left, format right"

    $MonPath = "c:\temp"

    Get-ChildItem $MonPath -Exclude *.txt

    266 fichiers dans mon Temp, dont 72 .txt, et la si je compte je n'en ai plus que 194 qui ne sont pas .txt

    Attention : n'oublies pas que Get-ChildItem te retournes seulement les objets du 1er niveau, pas oublier le -Recurse ou -Depth si nécessaire.

    Cordialement

    Olivier

    C'est sûr qu'avec Exclude on voit plus vite où on veut en venir.


    • Modifié Gloops lundi 22 mars 2021 14:51
    lundi 22 mars 2021 14:50
  • @Gloops,

    [...il m'a semblé que ça marchait mieux sans mettre -Property. Ça m'a surpris d'ailleurs....]

    non pas mieux, mais il faut savoir que pour ce nombreuses cmdlets, certains paramètres peuvent être implicites (omis). Exemple :

    Get-Service W32Time est équivalent à Get-Service -Name W32Time et si tu es curieux, jettes un oeil sur Get-Help Get-Service -ShowWindow, et regardes la propriété Name.  Name, accepte les entrées par le pipeline par le nom ou la valeur. On pourrait donc faire également faire un "W32Time" | Get-Service et ça saurait retrouver ces petits tout seul. Ce paramètre "Name" peut donc être implicite (non cité)

    Olivier

    mardi 23 mars 2021 08:00
  • J'ai oublié mon exemple, il me semble bien qu'il y a eu un cas où je n'avais pas les informations avec le mot-clef Property, et je les ai obtenues en le supprimant.

    Mais j'ai dû confondre, et c'est loin maintenant.

    Là du coup, j'ai au moins appris qu'il y a un service W32Time qui n'est pas nécessaire au fonctionnement de l'horloge.

    mardi 23 mars 2021 12:27