Ich habe den folgenden Code:Erhalten Namen Aufruf Funktion in 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
Das Ergebnis hiervon ist:
foo
demo
Was will ich stattdessen bekommen ist:
bar
demo
Das Problem scheint zu sein, dass ich innerhalb der Funktion foo die Funktionsleiste mit dem Invoke-Command-Cmdlet und dem powshel aufruft Ich sehe dies als die aufrufende Funktion von demo. Durch mein Verständnis ruft die Funktionsleiste Demo, nicht foo.
Ich kann nicht herausfinden, warum Powershell so verhält und wie zu dem Punkt, wo Powershell mir den Funktionsnamen "bar" zurückgibt. Sogar meine Idee Powershell mit den Worten zu „Narren“:
function bar() {
$sb = (Get-Command demo -CommandType Function).ScriptBlock
Invoke-Command -ScriptBlock $sb
}
führte zu keinem Erfolg führen, in Bezug auf „bar“. Ich bin an dem Punkt, an dem ich verzweifelt um deine Hilfe rufe.
Wenn Sie tatsächlich 'bar' in den Call-Stack wollen wollen, dann warum schiebst du die Definition in einen Skriptblock, anstatt sie nur anzurufen? z.B. 'Funktion foo {bar}' – BenH
genau. Sie haben nie 'bar' aufgerufen. Sie haben einen ScriptBlock aufgerufen, der in '$ sb' gespeichert wurde (aus' bar') – Clijsters
Das ist genau das Problem, das ich nicht sah! Vielen Dank Ihre Antworten - sehr geschätzt. – nococo