Powershell递归函数-如何判断我处于哪个级别?

Powershell递归函数-如何判断我处于哪个级别?,powershell,recursion,Powershell,Recursion,我有一个返回TFS工作项信息的代码。我去掉了TFS特有的东西来降低噪音。在一天结束时,它是一个递归函数,从一个根开始,沿着一棵树走,只要它找到子对象。我想添加一些逻辑,根据级别的不同对输出进行不同的格式化。可能会在每行中添加一个选项卡,或者以其他方式直观地标识每个级别,是否存在类似于if$$some_variable-eq 1{write host welcome to level 1}的情况? 以下是powershell代码: $wi_id = 123 $result=@() func

我有一个返回TFS工作项信息的代码。我去掉了TFS特有的东西来降低噪音。在一天结束时,它是一个递归函数,从一个根开始,沿着一棵树走,只要它找到子对象。我想添加一些逻辑,根据级别的不同对输出进行不同的格式化。可能会在每行中添加一个选项卡,或者以其他方式直观地标识每个级别,是否存在类似于if$$some_variable-eq 1{write host welcome to level 1}的情况? 以下是powershell代码:

   $wi_id = 123
$result=@()

function get_linkedWIs  {
param($wi_id)
$WIT.GetWorkItem($wi_id) |%{ $_.WorkItemLinks} |?{$_.LinkTypeEnd.Name -eq "Child" } | %{$result +=$WIT.GetWorkItem($_.targetid)}

$result.GetEnumerator()  | Sort -Property id -Unique 
}

function get_children {
param($wi_id)
$rs = get_linkedWIs $wi_id
$rs | %{
Write-Host "this is a num - "$script:num

write-host $_.Type.Name" "$_.id" "$_.Title
$has_children = 0
$_.WorkItemLinks | %{if ($_.LinkTypeEnd.Name -eq "Child" -or $has_children -eq 1) {$has_children =1} }
if ($has_children -eq 1)
{
$script:num +=1
get_children $_.id 
}
}

}


get_children $wi_id
当然。。。在参数列表中传递级别变量。主程序使用值1调用。当函数递归时,使用值$level+1调用。这样,每个实例都有一个保持调用级别的局部变量


您也可以使用全局变量执行此操作,在输入时加1,在输出时减1,但这并不安全。

如果每个节点都只有一个子节点,则可以正常工作,但情况显然并非如此。所以,让我们有一个特性,它是1级,然后是用户故事,它是2级。根据您的建议,每次为用户故事调用此函数时,级别指示器都会增加,但不应该增加。只有在处理用户故事子工作项时,级别才应增加到3。有意义吗?在我的第一个建议中,feature节点使用$level+1调用其每个子节点;不要增加局部值,只需再向子级传递一个。每个用户故事子级都获得相同的递增值。你的描述似乎暗示了等级提升和儿童不等同。请描述一下你的树结构。谢谢,不,它们是等价的。我只是在进行递归调用的循环中添加$level+1。我觉得这很简单。