1
votes

Existe-t-il un moyen de faire écho à plusieurs objets à la fois?

Je veux savoir si je pourrais faire écho à plusieurs objets dans PowerShell. J'ai essayé de rechercher ceci et j'ai trouvé ceci , mais ce n'était pas ce que je recherchais.

En gros, je veux pouvoir faire écho à deux objets différents (qui peuvent tous deux être vus dans foreach-object code >) avec une seule commande.

Entrée et sortie attendues

PS C:\> $test = @("test1","test2","test3")
PS C:\> $test | % {echo "$_ and this"}
test1 and this
test2 and this
test3 and this

Entrée et sortie pour ce que j'ai essayé.

Process1 (Thing) and this
Process2 (Thing) and this
Process3 (Thing) and this
Process4 (Thing) and this

Résultat attendu:

PS C:\> get-process | % {echo "$_ and this"}

Si je fais cela avec get-process par exemple, comme ceci:

test test
test test

Output:

PS C:\> echo "test`ntest" | % {echo "$_ test"}
test
test test 

Cela fonctionnera également avec des tableaux comme celui-ci:

PS C:\> <echo multiple object command> "test" | % {echo "$_ test"}
test test
test test


3 commentaires

Ce ... ["test`ntest" | % {echo "$ _ test"}] ... est une seule chaîne utilisant une nouvelle ligne, pas un tableau, et donc par conception ne listera pas comme vous le pensez.


Pouvez-vous clarifier ce que vous entendez par «commande d'objets multiples» et peut-être donner un exemple? Et expliquer / montrer pourquoi Get-Process n'est pas l'une de ces commandes?


Get-Process est l'une de ces commandes. Ils produisent plusieurs objets avec lesquels interagir avec ForEach-Object


3 Réponses :


0
votes

Vous pouvez combiner la sortie en une seule ligne en utilisant la méthode -join .

Write-output (get-service)

Si vous souhaitez imprimer un tableau avec une seule sortie, vous pouvez citer le tableau pour l’imprimer avec une seule commande

echo "test`ntest" | % {echo "$_ test"}
test
test test

ce que je n’obtiens pas, c’est comment vous vous attendez à ce que ce qui suit imprime autre chose que / p>

Write-Output "$test"
# test1 test2 test3

En gros, vous envoyez la chaîne (test'ntest) à un objet foreach qui ne répète qu'une seule fois car il n'y a qu'une seule chaîne (test ' ntest) puis imprimez cela (contenu dans $ _ ) avec un autre "test".

Voici un autre exemple de la façon dont vous pouvez imprimer get-service avec une seule commande (sans boucle)

($test | % {echo "$_ and this"}) -join ","
# test1 and this,test2 and this,test3 and this


0 commentaires

0
votes

Selon Microsoft Docs

L'applet de commande ForEach-Object (%) effectue une opération sur chaque élément d'un collection d'objets d'entrée.

Et une collection est en d'autres termes un tableau Vous devez donc vraiment alimenter un tableau dans l'applet de commande foreach (%)

Quelques autres exemples:

@("test1","test2","test3").gettype() # system.array

(get-process).gettype() # system.array

(1..10).gettype() # system.array
1..10 | % {echo "$_ test"}

"test`ntest".Split("`n").gettype() #system array
"test`ntest".Split("`n") | % {echo "$_ test"}


0 commentaires

1
votes

En bref: Vous ne pouvez envoyer qu’un élément à la fois au pipeline. Que ce soit une chaîne, un tableau de chaînes ou tout autre objet.

Ce que vous demandez n'est pas de générer plusieurs objets, mais simplement la façon dont la sortie est affichée et formatée.

PowerShell est basé sur des objets et non sur du texte . La sortie affichée n'est pas contente. Il a des formats par défaut pour afficher les objets de manière pratique et lisible, même certains formats spéciaux pour afficher certains types d'objets de manière familière (par exemple, les éléments du système de fichiers).

Si je comprends bien, vous essayez d'afficher plusieurs objets "côte à côte". Il s'agit d'une approche très orientée texte (non orientée objet). Je ne le recommande pas.

En gros, ce n'est qu'une question de mise en forme. Demandez-vous: à quoi pensez-vous que la sortie ressemblera? Ensuite, trouvez un moyen de le faire. Quelques exemples simples ont déjà été mentionnés dans les autres réponses. Vous souhaiterez peut-être également écrire un fichier de formatage .

En fin de compte, tout dépend de vos préférences personnelles. Demandez-vous, en avez-vous vraiment besoin? Et pourquoi? Cela peut être un problème XY .


3 commentaires

C'est une bonne explication de ce qui devrait arriver. Si vous donnez quelques exemples, je marquerai ceci comme accepté.


@NekoMusume Des exemples de quoi exactement? Comment puis-je aider? Les autres réponses donnent déjà quelques exemples de cas d'utilisation simples. Si vous souhaitez créer un fichier de formatage, vous devez lire la documentation. Je n'en ai jamais créé moi-même.


Si vous ajoutez des exemples, cela répondra à ma question et je pense que c'est la meilleure réponse, donc je l'accepterai si vous ajoutez des exemples.