2015-12-02 1 views
1

Есть что-то в $MyInvocation, что делает это? Или каким-то образом его извлечь? Я хочу, чтобы исходный текст использовался для аргументов в вызове функции.В powershell, как я могу получить точную исходную команду, используемую для вызова функции?

+1

Вы ищете '$ MyInvocation.Line'? – xXhRQ8sD2L7Z

+0

'$ MyInvocation | fl * 'поможет вам решить, что вам нужно:) – sodawillow

ответ

0

C:\script.ps1:

function Say-MyName { 
    $MyInvocation | fl * 
} 

Say-MyName 

Выберите свое оружие:

MyCommand    : Say-MyName 
BoundParameters  : {} 
UnboundArguments  : {} 
ScriptLineNumber  : 5 
OffsetInLine   : 1 
HistoryId    : 6 
ScriptName   : C:\script.ps1 
Line     : Say-MyName 
PositionMessage  : At C:\script.ps1:5 char:1 
         + Say-MyName 
         + ~~~~~~~~~~ 
PSScriptRoot   : C:\ 
PSCommandPath   : C:\script.ps1 
InvocationName  : Say-MyName 
PipelineLength  : 1 
PipelinePosition  : 1 
ExpectingInput  : False 
CommandOrigin   : Internal 
DisplayScriptPosition : 
0

Есть несколько предостережений к использованию $myinvocation.line или $myinvocation.position. Если вы разделите вызов на свою команду на несколько строк (используя обратную линию), то .position и .line не покажут вам полную команду. Безопаснее использовать splatting, $args/$myinvocation.unboundarguments (и не определять какие-либо параметры для вашей функции) или $ input (если ваша функция получает вход конвейера), в зависимости от того, что вы хотите сделать с командной строкой. Однако, если вам нужно сохранить пробелы, используйте только .line или .position.

+0

Еще одна проблема с несвязанными аргументами заключается в том, что она все еще анализирует запятые, а в случае несвязанных - удаляет их. – VoidStar