Perché ForEach-Object si comporta diversamente quando viene chiamato foreach?


3

In PowerShell, foreach e % sono alias di default a ForEach-Object. Tuttavia, sembra che il comando si comporti in modo diverso a seconda di come viene chiamato.

In particolare, ho difficoltà a far funzionare il comando senza alimentarlo dall'input dalla pipeline, a meno che non utilizzi specificamente il comando foreach alias.

enter image description here

C'è qualcosa che sto sbagliando qui, o è questo in base alla progettazione per qualche motivo?

Risposte:


6

L'istruzione foreach e il cmdlet Foreach-Object NON la stessa cosa

Per uno:

Nel caso dell'oggetto Foreach, il corpo dell'istruzione viene eseguito come   appena ogni oggetto viene prodotto. Nella dichiarazione di foreach, tutto il   gli oggetti vengono raccolti prima che il corpo del loop inizi ad essere eseguito. Questo ha   due implicazioni

Esistono inoltre differenze di prestazioni e di sintassi.

$i = @(1..3) | ForEach-Object {Write-Host $_}

Funziona in Foreach-Object.


Questa linea di script funziona foreach, ForEach-Object, e %. Può anche essere abbreviato 1..3|%{$_}. :-)
Iszi

Oh accidenti, non programmatemi! @ Iszi In realtà lavoro duramente per scrivere i miei comandi il più delle volte;) Mi piacciono i comandi leggibili del codice. Ma molto bello.
Austin T French

3
Perché utilizzare foreach vs foreach-object? - "Per prima cosa è importante capire che foreach -ne foreach-object se non utilizzato nella pipeline."
Ƭᴇcʜιᴇ007

Sembra che vogliamo usarlo ForEach-Object senza tubazioni, con sintassi alquanto simile a foreach possiamo fare ForEach-Object -InputObject (1..3) {$_} o % -i(1..3){$_}.
Iszi

1
potrebbe essere utile chiarire nella prima frase "L'istruzione foreach e il Cmletlet Foreach-Object non sono ..." - per qualcuno che non conosce già la risposta, penso che sarebbe utile distinguere ulteriormente i due in un primo momento vista (?) qualcun altro vorrà pesare su questo?
Code Jockey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.