2014-09-01 41 views
2

为什么$MyInvocation.MyCommand.Name在函数内执行时为您提供函数的名称? 根据this这是为了给你脚本文件的名称。 这里是我使用的代码:

function startScript 
{ 
    $ScriptName = $MyInvocation.MyCommand.Name 
    $ScriptName 
} 

$ScriptName = $MyInvocation.MyCommand.Name 
$ScriptName 

startScript 

<# 
Output: 

testing.ps1 
startScript 
#> 

回答

4

根据PowerShell documentation

$MyInvocation 
     Contains an information about the current command, such as the name, 
     parameters, parameter values, and information about how the command was 
     started, called, or "invoked," such as the name of the script that called 
     the current command. 

     $MyInvocation is populated only for scripts, function, and script blocks. 
     You can use the information in the System.Management.Automation.InvocationInfo 
     object that $MyInvocation returns in the current script, such as the path 
     and file name of the script ($MyInvocation.MyCommand.Path) or the name of a 
     function ($MyInvocation.MyCommand.Name) to identify the current command. 
     This is particularly useful for finding the name of the current script. 

还可以看到以下的段落,如果你有兴趣的脚本路径:

Beginning in Windows PowerShell 3.0, $MyInvocation has the following new 
    properties. 

    -- PSScriptRoot: Contains the full path to the script that invoked the 
     current command. The value of this property is populated only when 
     the caller is a script.