Есть что-то в $MyInvocation
, что делает это? Или каким-то образом его извлечь? Я хочу, чтобы исходный текст использовался для аргументов в вызове функции.В powershell, как я могу получить точную исходную команду, используемую для вызова функции?
ответ
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 :
Есть несколько предостережений к использованию $myinvocation.line
или $myinvocation.position
. Если вы разделите вызов на свою команду на несколько строк (используя обратную линию), то .position
и .line
не покажут вам полную команду. Безопаснее использовать splatting, $args
/$myinvocation.unboundarguments
(и не определять какие-либо параметры для вашей функции) или $ input (если ваша функция получает вход конвейера), в зависимости от того, что вы хотите сделать с командной строкой. Однако, если вам нужно сохранить пробелы, используйте только .line
или .position
.
Еще одна проблема с несвязанными аргументами заключается в том, что она все еще анализирует запятые, а в случае несвязанных - удаляет их. – VoidStar
Вы ищете '$ MyInvocation.Line'? – xXhRQ8sD2L7Z
'$ MyInvocation | fl * 'поможет вам решить, что вам нужно:) – sodawillow