je le code suivant:Obtenir le nom de la fonction invoquant dans Powershell
function foo() {
$sb = (Get-Command bar -CommandType Function).ScriptBlock
Invoke-Command -ScriptBlock $sb
}
function bar() {
demo
}
function demo() {
Write-Host $((Get-PSCallStack)[0].Command)
Write-Host $((Get-PSCallStack)[1].Command)
}
foo
Le résultat de ceci est:
foo
demo
Ce que je veux à la place:
bar
demo
Le problème semble être que dans la fonction foo j'appelle la barre de fonction en utilisant la cmdlet Invoke-Command et ce powershel Je vois cela comme la fonction d'appel de la démo. D'après ce que je comprends, la barre de fonction appelle démo, pas foo.
Je n'arrive pas à comprendre pourquoi powershell se comporte ainsi et comment arriver au point où powershell me renvoie le nom de la fonction "bar". Même mon idée de « fou » powershell en disant:
function bar() {
$sb = (Get-Command demo -CommandType Function).ScriptBlock
Invoke-Command -ScriptBlock $sb
}
n'a pas donné lieu à aucune réussite en ce qui concerne « bar ». Je suis au point où je demande désespérément votre aide.
Si vous voulez réellement veulent 'bar' dans la pile d'appel alors pourquoi est-ce que vous envoyez la définition dans un script plutôt que de simplement l'appeler? par exemple. 'Fonction foo {bar}' – BenH
exact. Vous n'avez jamais appelé 'bar'. Vous avez appelé un ScriptBlock enregistré dans '$ sb' (tiré de' bar') – Clijsters
C'est exactement le problème que je n'ai pas vu! Merci beaucoup vos réponses - très appréciées. – nococo