Справочник по функциям Powershell и соглашения об именах - PullRequest
0 голосов
/ 26 ноября 2018

Я недавно обнаружил, что вы можете получить функции 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 как ответ, потому что он лучше задокументирован.

1 Ответ

0 голосов
/ 26 ноября 2018

function: - это PSDrive, а не модификатор (scope).Что касается его использования с переменным обозначением ($function:name): здесь также применяются правила для имен переменных со специальными символами.

Из документации :

ПЕРЕМЕННЫЕ ИМЕНА, КОТОРЫЕ ВКЛЮЧАЮТ СПЕЦИАЛЬНЫЕ ХАРАКТЕРЫ

Имена переменных начинаются со знака доллара.Они могут включать буквенно-цифровые символы и специальные символы.Длина имени переменной ограничена только доступной памятью.

Когда это возможно, имена переменных должны включать только буквенно-цифровые символы и символ подчеркивания (_). Имена переменных, которые включают пробелы и другие специальные символы, трудноиспользуйте и следует избегать.

Чтобы создать или отобразить имя переменной, которое содержит пробелы или специальные символы, заключите имя переменной в фигурные скобки. Это заставляет PowerShell интерпретировать символы вимя переменной буквально.

Ваша запись должна выглядеть следующим образом:

${function:Show-Message}

Она может быть вызвана так:

& ${function:Show-Message}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...