當你調(diào)用某個函數(shù)時,PowerShell會增加一次嵌套層次。當一個函數(shù)調(diào)用了另一個函數(shù),或著腳本,也會增加嵌套層次。今天分享一個函數(shù),它能告訴你的腳本嵌套的層次:
function Test-NestLevel
{
$i = 1
$ok = $true
do
{
try
{
$test = Get-Variable -Name Host -Scope $i
}
catch
{
$ok = $false
}
$i++
} While ($ok)
$i
}
當你調(diào)用的函數(shù)具有遞歸調(diào)用時,上面的函數(shù)非常有用,來看一個調(diào)用的示例:
function Test-Diving
{
param($Depth)
if ($Depth -gt 10) { return }
"Diving deeper to $Depth meters..."
$currentDepth = Test-NestLevel
"calculated depth: $currentDepth"
Test-Diving -depth ($Depth+1)
}
Test-Diving -depth 1
當你運行Test-Diving時,函數(shù)會調(diào)用自己10次。函數(shù)使用一個參數(shù)來控制嵌套層次,而Test-NestLevel負責返回確切的深度數(shù)。
注意這里有個區(qū)別:Test-NestLevel返回絕對的嵌套層次,參數(shù)會紀錄這個函數(shù)調(diào)用自己多少次。如果Test-Diving被嵌入到另外一個函數(shù)中,絕對深度和相對深度會不同。
PS C:\&; Test-Diving -Depth 1
diving deeper to 1 meters...
calculated depth: 1
diving deeper to 2 meters...
calculated depth: 2
diving deeper to 3 meters...
calculated depth: 3
diving deeper to 4 meters...
calculated depth: 4
diving deeper to 5 meters...
calculated depth: 5
diving deeper to 6 meters...
calculated depth: 6
diving deeper to 7 meters...
calculated depth: 7
diving deeper to 8 meters...
calculated depth: 8
diving deeper to 9 meters...
calculated depth: 9
diving deeper to 10 meters...
calculated depth: 10
PS C:\&; { Test-Diving -Depth 1 }
diving deeper to 1 meters...
calculated depth: 2
diving deeper to 2 meters...
calculated depth: 3
diving deeper to 3 meters...
calculated depth: 4
diving deeper to 4 meters...
calculated depth: 5
diving deeper to 5 meters...
calculated depth: 6
diving deeper to 6 meters...
calculated depth: 7
diving deeper to 7 meters...
calculated depth: 8
diving deeper to 8 meters...
calculated depth: 9
diving deeper to 9 meters...
calculated depth: 10
diving deeper to 10 meters...
calculated depth: 11
PS C:\&;
Test-NestLevel總會返回從當前代碼的作用域到全局作用域的嵌套深度。