Vous pouvez utiliser $MyInvocation qui contient quelques informations utiles sur ce qui est actuellement exécuté.
function foo {'This function is called {0}.'-f $MyInvocation.MyCommand}
Qui fonctionne grâce une idée de comment obtenir de l'appel nom de la fonction? J'ai essayé d'autres $myInvocation propriétés, mais je n'en vois pas. la fonction foo { 'Cette fonction est appelée {0}.' -f $MyInvocation.MyCommand 'Ce de l'Appelant est appelé {0}.' -f $MyInvocation.? } function CallFoo { foo } CallFoo Si vous êtes sur PowerShell 2.0 utilisation (Get-PSCallStack)[1].Command. En faire une question distincte, afin que les gens puissent le trouver. La réponse dans la v1 est en gv -sc $_ myinvocation. Voir jtruher.spaces.live.com/blog/cns!7143DA6E51A2628D!172.entrée Je suis venu à travers deux méthodes d'obtention de l'appel nom de la fonction: 1) (Get-PSCallStack | Select-Object FunctionName -Skip 1 -First 1).FunctionName et 2) (Get-Variable MyInvocation -Scope 1).Value.MyCommand.Name. J'ai essayé de l'exécution de chaque dans une boucle de 1000 fois pour voir combien de temps chacun a pris. Le Get-Variable... méthode prend environ la moitié du temps de l'Obtenir-PSCallStack... méthode. Rien d'étonnant, considérant que Get-PsCallStack a probablement créer une pile d'appel en ce moment, au lieu d'avoir juste à regarder une fois dans le imbriqués étendues. Cependant, je doute que ce n'est jamais de performance pertinents. Si c'était vous de ne pas écrire votre code à la dynamique autour de la fonction des noms, ou même utiliser PowerShell.
Lorsque vous êtes dans une fonction, vous pouvez accéder à la variable automatique $PSCmdLet.
C'est un outil très utile de variable qui contient beaucoup d'informations à propos de l'exécution de la cmdlet.
Dans notre scénario, nous souhaitions que le nom et la définition de la fonction en cours pour certains la récursivité. $MyInvocation était nulle parce que la fonction a été à l'intérieur d'un module PowerShell.
Cependant, il y a un "MyInvocation" bien sur la PSCmdLet objet qui contient toutes les informations nécessaires et a permis à notre scénario à exécuter.
par exemple
$PSCmdlet.MyInvocation.MyCommand.Nom = le nom de La fonction
$PSCmdlet.MyInvocation.MyCommand.Définition = la définition de La fonction
$PSCmdlet semble ne fonctionne que si la fonction a un explicite [CmdletBinding()] attribut. La about_automatic_variables pour $PsCmdlet dit Contains an object that represents the cmdlet or advanced function that is being run. Donc, il ne fonctionne qu'avec des fonctions avancées, qui ont la CmdletBindingAttribute, pas de fonctions normales.
La Get-PSCallStack option semble fonctionner qu'une seule fois: lors de l'appel d'une fonction dans le corps du script, la première fois qu'il va récupérer le nom du script, mais la deuxième fois, il va récupérer le texte "
Semble être reproductible pour moi, le retour de l'appel de la pile à chaque fois que je l'appelle. Je voulais trouver le nom de la fonction appelante et à l'aide de Get-PSCallStack semble être la façon de le faire; - la méthode de Jay Bazuzi du lien ne me donne pas l'appel nom de la fonction. Pour quelqu'un d'autre, j'ai utilisé Get-PSCallStack | Select-Object FunctionName -Skip 1 -First 1 pour obtenir le nom de la fonction appelante. Si la fonction est appelée depuis le script de haut niveau cette volonté de retour '<ScriptBlock>'.
Vous pouvez utiliser
$MyInvocation
qui contient quelques informations utiles sur ce qui est actuellement exécuté.Si vous êtes sur PowerShell 2.0 utilisation
(Get-PSCallStack)[1].Command
.En faire une question distincte, afin que les gens puissent le trouver. La réponse dans la v1 est en
gv -sc $_ myinvocation
. Voir jtruher.spaces.live.com/blog/cns!7143DA6E51A2628D!172.entréeJe suis venu à travers deux méthodes d'obtention de l'appel nom de la fonction: 1)
(Get-PSCallStack | Select-Object FunctionName -Skip 1 -First 1).FunctionName
et 2)(Get-Variable MyInvocation -Scope 1).Value.MyCommand.Name
. J'ai essayé de l'exécution de chaque dans une boucle de 1000 fois pour voir combien de temps chacun a pris. Le Get-Variable... méthode prend environ la moitié du temps de l'Obtenir-PSCallStack... méthode.Rien d'étonnant, considérant que
Get-PsCallStack
a probablement créer une pile d'appel en ce moment, au lieu d'avoir juste à regarder une fois dans le imbriqués étendues. Cependant, je doute que ce n'est jamais de performance pertinents. Si c'était vous de ne pas écrire votre code à la dynamique autour de la fonction des noms, ou même utiliser PowerShell.OriginalL'auteur Joey
Lorsque vous êtes dans une fonction, vous pouvez accéder à la variable automatique $PSCmdLet.
C'est un outil très utile de variable qui contient beaucoup d'informations à propos de l'exécution de la cmdlet.
Dans notre scénario, nous souhaitions que le nom et la définition de la fonction en cours pour certains la récursivité. $MyInvocation était nulle parce que la fonction a été à l'intérieur d'un module PowerShell.
Cependant, il y a un "MyInvocation" bien sur la PSCmdLet objet qui contient toutes les informations nécessaires et a permis à notre scénario à exécuter.
par exemple
$PSCmdlet.MyInvocation.MyCommand.Nom = le nom de La fonction
$PSCmdlet.MyInvocation.MyCommand.Définition = la définition de La fonction
$PSCmdlet
semble ne fonctionne que si la fonction a un explicite[CmdletBinding()]
attribut.La about_automatic_variables pour $PsCmdlet dit
Contains an object that represents the cmdlet or advanced function that is being run
. Donc, il ne fonctionne qu'avec des fonctions avancées, qui ont la CmdletBindingAttribute, pas de fonctions normales.OriginalL'auteur CarlR
La
Get-PSCallStack
option semble fonctionner qu'une seule fois: lors de l'appel d'une fonction dans le corps du script, la première fois qu'il va récupérer le nom du script, mais la deuxième fois, il va récupérer le texte "Get-PSCallStack | Select-Object FunctionName -Skip 1 -First 1
pour obtenir le nom de la fonction appelante. Si la fonction est appelée depuis le script de haut niveau cette volonté de retour '<ScriptBlock>'.OriginalL'auteur Ron
Facile.
Par défaut Get-FunctionName dans l'exemple obtiendrez le nom de la fonction qui l'a appelée.
L'augmentation de la StackNumber paramètre obtiendrez le nom du prochain appel de la fonction.
OriginalL'auteur Jakobii