Как сделать точечные исходные функции внутри подпапки в PowerShell - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь создать модуль PowerShell, который будет ставить точки для любых функций, найденных в подпапке "\ Functions" , используя следующий код:

# Get the path to the function files
$functionPath = $PSScriptRoot + "\Functions\"

# Get a list of all the function filenames
$functionList = Get-ChildItem -Path $functionPath -Include *.ps1 -Name

# Loop through all discovered files and dot-source them into memory
ForEach ( $function in $functionList ) {
    . ( $functionPath + $function )
}

Это работает нормально, если я уронил все свои функции прямо в папку "\ Functions". Однако это не идеально, так как я не думаю, что это позволяет должным образом управлять файлами функций в более позднее время (, особенно в командной среде, где несколько SysAdmins могут изменять файл сценария каждой функции в любой момент времени ). Кроме того, некоторые функции принимают входные данные из CSV или текстовых файлов, и будет намного удобнее, если эти активы и соответствующие функции будут находиться в одной папке.

Отсюда и мой вопрос: Как мне выполнить то, что я пытаюсь сделать выше (т. Е. С точечным источником ВСЕХ функций, которые находятся в подпапке "\ Functions" $ PSScriptRoot , даже если они находятся в подпапках?

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

Благодарность Брайану Кафферки в этом YouTube Video за вдохновение

1 Ответ

1 голос
/ 04 апреля 2019

Вы можете немного упростить это с помощью одной строки:

Get-ChildItem -Path "$PSScriptRoot\Functions\" -Filter *.ps1 -Recurse | %{. $_.FullName }

Вы пропустили параметр -Recurse и могли использовать $function.FullName вместо объединения $functionPath и $function

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