2 votes

PowerShell : Sortie de commande externe vers commande interne

Je veux exécuter ces deux commandes dans PowerShell simultanément, et utiliser la sortie de dir comme chemin dans Get-ChildItem

cmd /r dir /b/s/a/t screenshot_37.png; powershell -command "& {Get-ChildItem "dir output" -recurse -force}"

Puis-je recevoir des informations sur la manière dont cela est possible ?

(Contexte : Je mène des recherches de fichiers spécifiques et souhaite connaître leurs attributs s'ils sont trouvés)

1voto

mklement0 Points 12597
  • Si vous appelez cela depuis PowerShell, vous n'avez pas besoin d'appeler powershell.exe pour exécuter Get-ChildItem : il suffit d'invoquer ce dernier directement, ce qui évite la création coûteuse d'un processus enfant PowerShell.

    • Si vous deviez résoudre cela via la commande dir de cmd.exe (voir le point suivant pour savoir comment éviter cela), vous auriez besoin :

      Obtenir-ÉlémentEnfant -Récursif -Force -CheminLittéral (
        cmd /c dir /b /s /a screenshot_37.png
      ) | Sélectionner NomComplet, Attributs
    • Notez que j'utilise /c avec cmd.exe (/r est un alias rarement vu qui existe pour la compatibilité ascendante) et j'ai supprimé l'option /t de dir, qui n'a aucun effet en raison de l'utilisation de /b.

  • Plus fondamentalement, un seul appel à Get-ChildItem devrait suffire - pas besoin de la commande interne dir de cmd.exe :

    Obtenir-ÉlémentEnfant -Récursif -Force -Filtrer screenshot_37.png |
      Sélectionner NomComplet, Attributs

0voto

mandy8055 Points 509

Pour atteindre votre objectif, il suffit de capturer la sortie de la commande dir et de la stocker dans une variable. Ensuite, utilisez cette variable dans Get-ChildItem. Quelque chose comme :

$dirOutput = cmd /r dir /b/s/a/t screenshot_37.png
powershell -command "& {Get-ChildItem $dirOutput -RF}"

AVIS : Si $dirOutput contient plusieurs chemins, ils seront transmis en tant qu'arguments positionnels individuels, ce qui cassera la syntaxe de Get-ChildItem.

Une autre méthode :

Vous pouvez également utiliser directement Get-ChildItem pour rechercher un fichier spécifique et obtenir ses attributs.

$file = "screenshot_37.png"
$items = Get-ChildItem -Filter $file -RF
$items | Format-List *

-1voto

trblshootr Points 23

Merci beaucoup à @mandy8055 ! Ce qui suit a été exécuté avec succès : $dirOutput = cmd /r dir /b/s/a/t screenshot_37.png; powershell -command "& {Get-ChildItem $dirOutput -Recurse -Force}"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X