Извлечение функций из файла скрипта - PullRequest
3 голосов
/ 19 августа 2010

Есть ли более простой способ получить список всех функций в данном скрипте Powershell, чем сопоставление сигнатур функций с регулярным выражением (в Powershell)?

Ответы [ 3 ]

4 голосов
/ 19 августа 2010

Я думаю, есть много способов. Один не разбирает файл и довольно прост:

@"
function mya { write-host mya }
function myb { write-host myb }
Invoke-Expression "function hiddena { write-host by invoke-expression }"
"@ | set-content c:\test1.ps1

$functions = & { 
  $before = gci function:\
  . c:\test1.ps1 
  $after = gci function:\
  Compare-Object $before $after -SyncWindow $before.Length | Select -expand InputObject
}
$functions | ? { $_.Name -match 'a' }


> CommandType     Name                          Definition
> -----------     ----                          ----------
> Function        hiddena                       write-host 'by invoke-expression'
> Function        mya                           write-host 'mya' 

Я создал дочернюю область, в которую импортировал функции, а затем просто сравнил то, что было добавлено. Весь скрипт-блок возвращает добавленные функции, которые вы обрабатываете дальше.

Обратите внимание, что если вы используете только токенизатор, вы не найдете функцию hiddena, потому что она содержится в простой строке. То же самое, если вы используете, например, Set-Content function:\testa -value { write-host 'by set-item' }.

3 голосов
/ 19 августа 2010

Если вы знаете полный путь к файлу сценария, который содержит функции и функции, загруженные в сеанс:

PS> функция dir: | где {$ _. scriptblock.file -eq 'd: \ functions.ps1'}

3 голосов
/ 19 августа 2010

Вот версия, в которой используется токенайзер PowerShell. Не уверен, что это проще.

Использование PowerShell's PsParser :: Tokenize, обзор функций в скриптах PowerShell

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...