Хорошо, у меня есть файл functions.ps1, который содержит только код функции: что-то вроде этого:
##--------------------------------------------------------------------------
## FUNCTION.......: some-Function1
## PURPOSE........:
## EXAMPLE........:
## REQUIREMENTS...: PowerShell 2.0
## NOTES..........:
##--------------------------------------------------------------------------
Function Some-Function1
{
Code goes here
}
##--------------------------------------------------------------------------
## FUNCTION.......: some-Function2
## PURPOSE........:
## EXAMPLE........:
## REQUIREMENTS...: PowerShell 2.0
## NOTES..........:
##--------------------------------------------------------------------------
Function Some-Function2
{
Code goes here
}
Теперь последняя функция в этом файле (и та, которая имеет отношение к моей проблеме):
##--------------------------------------------------------------------------
## FUNCTION.......: List-Functions
## PURPOSE........:
## EXAMPLE........:
## REQUIREMENTS...: PowerShell 2.0
## NOTES..........:
##--------------------------------------------------------------------------
function List-Functions
{
$func_1 = "## FUNCTION"
$func_2 = Get-Content \\Server\scripts\functions.ps1
$func_2 | select-string -pattern $func_1 | foreach {write-host $_.line}
}
Идея заключается в том, что из консоли я могу указать исходный файл function.ps1, и, запустив List-Functions, я получу список всех функций в файле функций.
За исключением запуска, List-Function возвращает что-то вроде этого:
## FUNCTION.......: some-Function1
## FUNCTION.......: some-Function2
## FUNCTION.......: List-Functions
$func_1 = "## FUNCTION"
Все круто, кроме последнего фрагмента кода. Я знаю, что это только соответствует шаблону, который я дал, но это раздражает меня чем-то яростным.
Я знаю, что мое регулярное выражение слабо, и я пытался изменить функции списка, чтобы отфильтровать этот бит, но у меня нет радости. Кто-нибудь может указать, что я могу сделать, чтобы это работало правильно?
Мое решение (которое некрасиво) состояло в том, чтобы изменить List-Functions на это:
##--------------------------------------------------------------------------
## FUNCTION.......: List-Functions
## PURPOSE........:
## EXAMPLE........:
## REQUIREMENTS...: PowerShell 2.0
## NOTES..........:
##--------------------------------------------------------------------------
function List-Functions
{
$char = [char] '#'
$func_1 = $char + $char + " FUNCTION"
$func_2 = Get-Content \\server\scripts\functions.ps1
$func_2 | select-string -pattern $func_1 | foreach {write-host $_.line}
}
Я же говорил, это было некрасиво, но это работает;)