Eu tenho uma função que parece não sair quando encontra a palavra-chave return
. Em vez disso, continua com a função. Aqui está o trecho relevante da função:
function Do-Something($photoNum,$photoLabelArrUniq) {
...
$fileLabelArrUniq=(Get-ChildItem -filter "$photoNum *.tif").name.substring(4,14) | sort-object | get-unique
$photoSideArr=@()
$photoSideArr=($fileLabelArrUniq.substring(0,1))
write-host "photoSideArr: $photoSideArr"
$a=3
$photoSideArr | Foreach-Object {
if ($_ -eq "B") {
write-host "return: $fileLabelArrUniq"
write-host "Hello There"
$a=4
return $fileLabelArrUniq
}
}
write-host "a: $a"
...
return $something
}
e os resultados são:
photoSideArr: B F F
return: B OR 06K24b 07 F CC 06K24b 07 F OR 06K24b 07 #This is an array with 3 members: "B OR 06K24b 07","F CC 06K24b 07","F OR 06K24b 07"
Hello There
a: 4
O return: B OR 06K24b 07 F CC 06K24b 07 F OR 06K24b 07
e Hello There
indica que está no if
bloco de condição e, portanto, deve retornar $fileLabelArrUniq
e, em seguida, sair da função. No entanto, conforme evidenciado pelo resultado a: 4
(que só pode ocorrer se no if
bloco que incluir a return
palavra-chave), a função continua depois que deveria retornar um resultado para o script principal e sair.
Meu entendimento de como return
funciona em scripts está errado ou estou perdendo algo com a sintaxe? Eu estou perdido.
ForEach-Object
pega um bloco de script , que é como uma função.Return
sai apenas da chamada atual do bloco de script, não da função externa, portanto,ForEach-Object
ainda está em andamento e chamará o bloco de script novamente com o próximo item.A maneira mais fácil de deixar seu loop sair da função é usar um
ForEach
loop, que não interpreta a sintaxe do bloco entre colchetes como um bloco de script: