Utilizarea instrucțiunii „Return” în funcțiile și scripts PowerShell

Configurare noua (How To)

Situatie

Principala utilizare a instrucțiunii „return” în PowerShell este aceea de a returna rezultatul unei funcții și/sau de a ieși din domeniul de aplicare curent. Domeniul de aplicare poate fi o funcție, un script sau un bloc de script. După ce instrucțiunea „Return” este invocată, PowerShell iese din funcție și returnează controlul către codul apelant. În acest articol, vom analiza exemple de utilizare a instrucțiunii „Return” în scripturile PowerShell.

Solutie

Comportamentul instrucțiunii „Return” în PowerShell

Instrucțiunea „Return” poate fi utilizată în PowerShell pentru a ieși din domeniul de aplicare curent.

for ($i = 1; $i -le 5; $i++) {

“The number is $i”

}

Output-ul va fi:

The number is 1
The number is 2
The number is 3
The number is 4
The number is 5 – si aici se va termina.

Însă, atunci când inserați cuvântul-cheie „return” după rezultat, întreaga iterație se încheie după primul rezultat.

for ($i = 1; $i -le 5; $i++) {

“The number is $i”

return

}

Bucla „for” se încheie după afișarea primului rezultat, datorită cuvântului-cheie „return” care urmează.

Exemplul 2

Codul de mai jos afișează șirul „Numărul este %n”, unde %n reprezintă numerele de la 1 la 5. Rezultatul este afișat de două ori la fiecare iterație, o dată în verde și o dată în magenta.

1..5 | ForEach-Object {

Write-Host “The number is $_” -ForegroundColor Green

Write-Host “The number is $_” -ForegroundColor Magenta

}

Nota Bene: Exemplele de mai sus utilizează comanda Write-Host doar pentru a ilustra fluxul de execuție. În scripturile de producție și în funcțiile reutilizabile, este recomandat, în general, să returnați obiecte către pipeline, în loc să afișați informațiile direct pe consolă.

Însă, atunci când inserați cuvântul-cheie „Return”, acesta încheie bucla și returnează controlul către codul care a inițiat-o.

1..5 | ForEach-Object {

Write-Host “The number is $_” -ForegroundColor Green

return

Write-Host “The number is $_” -ForegroundColor Magenta

}

Când utilizați instrucțiunea Return în cmdlet-urile de tip pipeline (cum ar fi ForEach-Object, Where-Object etc.), aceasta nu întrerupe procesarea buclei, ci doar trece la următorul element din pipeline:

Get-ADUser -filter *| foreach-object { if (!$_.enabled) { return $_.UserPrincipalName} }

Folosiți instrucțiunea „Break” în locul lui „Return” pentru a ieși din buclă.

Rețineți că comportamentul cuvântului-cheie „return” este identic atât în Windows PowerShell 5.1, cât și în PowerShell 7+. Cu toate acestea, PowerShell 7 oferă o performanță îmbunătățită a pipeline-ului și suport multiplataformă, motiv pentru care este recomandata utilizarea versiunii mai noi pentru proiectele noi de automatizare.

Folosiți instrucțiunea Break în locul lui Return pentru a ieși din buclă. Rețineți că, într-o buclă foreach tradițională, instrucțiunea break pune capăt imediat buclei:

foreach ($item in $items) {
if ($item -eq 5) {
break
}
}

Cu toate acestea, într-un pipeline de tip ForEach-Object, instrucțiunea return pune capăt doar invocării blocului de script curent, iar procesarea continuă cu următorul obiect din pipeline:

$items | ForEach-Object {
if ($_ -eq 5) {
return
}

$_
}

Prin urmare, instrucțiunea „return” din ForEach-Object se comportă mai degrabă ca „continue” fata de „break”.

În cazul în care trebuie să opriți complet procesarea, ar trebui să luați în considerare restructurarea codului pentru a utiliza o buclă „foreach” specifică limbajului, în locul ForEach-Object. Această distincție este importantă atunci când se lucrează cu colecții mari, deoarece mulți oameni presupun în mod eronat că instrucțiunea „return” oprește întregul flux de procesare.

Tip solutie

Permanent

Voteaza

(0 din 1 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?