Question [Fonction]Cmt recupérer la pile d'appel/callstack?

Plus d'informations
il y a 17 ans 8 mois #2506 par Laurent Dardenne
Pour récupérer la pile d'appel on utilisera la fonction suivante :
[code:1]function Get-CallStack{
#Auteur Bruce Payette
#Erreur : Get-Variable : The scope number '5' exceeds the number of active scopes
trap { continue }
0..100 | foreach {
$var = Get-Variable -scope $_ myinvocation
#le dernier élément du tableau est vide
$var.Value.PositionMessage -replace \"`n\"
}
}[/code:1]
Pour afficher, à partir de la pile d'appel, uniquement le nom de la fonction/script en cours d'exécution :
[code:1]
function ParseStack([string[]] $Stack)
{ #On analyse des chaînes du type: At line:48 char:7+ NomDeScriptOuNomDeFonction <<<<
#Tableau de chaînes provenant d'un appel à Get-CallStack

$Result=new-object System.Text.StringBuilder
#le premier élément du tableau contient l'appel à Get-CallStack

#Parcours inverse
for($i=$Stack.Count-1; $i -ge 1;$i--)
{
if ($Stack[$i] -match \"^(.*)\+(.*) <<<<\"«»)
{ #Ajoute un séparateur sauf pour le premier
if ($i -ne $Stack.Count-2)
{[void]$Result.Append(\":\"«»)}
[void]$Result.Append($Matches[2].Trim())
}
}
$Result.ToString();
}[/code:1]
Code à ajouter dans la fonction ou dans un script :
[code:1]$Stack=Get-CallStack
ParseStack $Stack
write-Debug (\"CallStack {0}\" -F (ParseStack $Stack) )[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.037 secondes
Propulsé par Kunena