Имя справочной команды с тире - PullRequest
7 голосов
/ 13 декабря 2011

Я недавно обнаружил, что функции Powershell просто называются скрипт-блоками.Например,

function HelloWorld {
    Write-Output "Hello world"
}

$hw = $function:HelloWorld

& $hw     

Запустит метод HelloWorld.

Однако, что я не смог выяснить, так это как получить ссылку на метод, в имени которого есть тире:

function Hello-World {
    Write-Output "Hello world"
}

$hw = $function:Hello-World

You must provide a value expression on the right-hand side of the '-' operator.
At line:1 char:27
+     $hw = $function:Hello- <<<< World
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedValueExpression

Есть идеи?

Я знаю, что могу сделать что-то вроде:

$hw = (Get-Item function:Hello-World).ScriptBlock

Но это немного "шумно", и мне нравится синтаксис $ function

Ответы [ 3 ]

4 голосов
/ 13 декабря 2011

Doh! Я должен был придерживаться последовательности решения проблем Programmer и попросить моих коллег до того, как я отправил в SO. Похоже, я должен использовать:

$hw = ${function:Hello-World}
3 голосов
/ 13 декабря 2011

Помимо использования $script = ${function:hello-world} есть также $script = get-content function:hello-world.'$' в качестве унарного оператора соответствует использованию get-content (псевдоним gc)

2 голосов
/ 13 декабря 2011

Для вызова функции все, что вам нужно сделать, это вызвать ее по имени.

PS> Hello-World
Hello world

${function:Hello-World} - это способ получить код функции.Вот еще один способ:

Get-Command Hello-World | Select-Object -ExpandProperty Definition
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...