2016-11-04 2 views
0

Lasst uns sagen, dass ich dieses:Holen Sie sich das letzte aufgerufene Methode mit Argumenten

Function b 
{ 
    Param([string] $a, [string]$b) 

    (Get-PSCallStack | Select -First 1).InvocationInfo.Trim() 
} 

Function a 
{ 
    b "plip" "plop"; Write-Host "a" 
} 

cls 
a 

Wenn ich die Datei ausführen, die diesen Code enthält, werde ich

b "plip" "plop"; Write-Host "a" 

bekommen Wo eigentlich würde Ich mag bekommen :

b "plip" "plop"; 

Also im Grunde würde Ich mag in „b“ haben, die Anweisung, die „b“ mit seinen Parametern aufgerufen, wie es in der erscheint Code. Ich könnte versuchen, das mit einem regulären Ausdruck zu erreichen, der prüft, ob es ";" Schließen Sie die Anweisung, aber ich frage mich, ob es einen besseren Weg von PowerShell bietet.

+0

'InvocationInfo' hat' PositionMessage', die eindeutig den Befehl für den menschlichen Verzehr unterstreicht - vielleicht, dass für Ihre Zwecke genug ? Du könntest, wenn du es wirklich willst, das tatsächlich analysieren, um an den Befehl zu kommen, aber offensichtlich ist das extrem hässlich. –

+1

@PetSerAl: Warum ist das keine Antwort? –

+0

Euh, danke, es funktioniert. – ssougnez

Antwort

1

Sie können ScriptPosition interne Eigenschaft InvocationInfo Klasse verwenden, um Skript Position Befehl zu erhalten:

Function b 
{ 
    Param([string] $a, [string]$b) 

    [System.Management.Automation.InvocationInfo].InvokeMember(
     'ScriptPosition', 
     'GetProperty, Instance, NonPublic', 
     $null, 
     (Get-PSCallStack | Select -First 1).InvocationInfo, 
     $null 
    ).Text 
} 
Verwandte Themen