Я думаю, есть много способов. Один не разбирает файл и довольно прост:
@"
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' }
.