2011-11-23 10 views
13

Sto scrivendo uno script che esaminerà una directory di file Parent VHD e quindi valuterà quali VM stanno utilizzando quei VHD parent.

ho la meccanica di farlo funzionare, ma io sono in esecuzione in un problema in cui ho davvero bisogno di fare riferimento a una variabile conduttura automatica ($ _) dal contesto di una condotta nidificato

Il codice sudo sarebbe qualcosa di simile :

For each File in Files 
Iterate over all VMs that have differencing disks 
and return all the VMs that have a disk whose parent disk is File 

ecco il codice vero e proprio PowerShell ho implementato finora per fare questo:

$NAVParentFiles = get-childitem '\\hypervc2n2\c$\ClusterStorage\Volume1\ParentVHDs' | where {$_.Name -notLike "*diff*"} | select name 
$NAVParentFiles | % { Get-VM | where {$_.VirtualHardDisks | where {$_.VHDType -eq "Differencing" -and ($_.ParentDisk.Location | split-path -leaf) -like <$_ from the outer for each loop goes here> } } 

Grazie per qualsiasi aiuto che potete fornire me on come accedere elegantemente a una variabile di pipeline esterna da una pipeline annidata.

+0

Talvolta i "foreach'es" sono più leggibili delle condutture annidate. – stej

risposta

24

È possibile assegnare lo $_ a una variabile e utilizzarlo?

1..10 | %{ $a = $_; 1..10 | %{ write-host $a} } 

In ogni caso, considerare il refactoring del copione. È troppo annidato. Concentrarsi sulla leggibilità. Non è sempre necessario eseguire il pipe, è possibile utilizzare un ciclo foreach se ciò aiuta a migliorare la leggibilità.

+0

Questo ha fatto il trucco =). Sto osservando il refactoring del codice come suggerito e forse andando ad annotare foreach loop dove ha senso. –

Problemi correlati