Я недавно обнаружил, что вы можете получить функции powershell по ссылке, используя модификатор $function:
.Но я заметил странную проблему ...
По соглашению POSH использует соглашение {Verb}-{Noun}
для имен функций, где {Verb}
является частью утвержденных имен глаголов POSH .Например: Get-Member
или Invoke-WebRequest
.
Дело в том, что, например, вызов $function:Get-Member
недопустим из-за дефиса;это прекрасно работает, если вы объявляете функцию, подобную ShowMessage
, и вызываете: $fn = $function:ShowMessage
.Поэтому я хотел бы знать, есть ли способ избежать этого вызова.
PS.: Я знаю другой вариант, но он гораздо более многословен:
function Show-Message { Write-Host "Foo"; }
$fn = (Get-Item "function:Show-Message").ScriptBlock;
$fn.Invoke();
Обновление: Хотя @PetSerAl был очень полезным и объяснил проблему, я отмечу ответ @Ansgar Wiechers как ответ, потому что он лучше задокументирован.