@NewDevLab

Включение одного ps1 в другой?

Кто как подключает файлы без установки пакетов?
Самое универсальное, что сделал, это
.(Join-Path -Path (Split-Path $script:MyInvocation.MyCommand.Path -Parent) -ChildPath ".\any.ps1")

Хотелось бы
.(Join-Path -Path (Split-Path $script:MyInvocation.MyCommand.Path -Parent) -ChildPath ".\PS.Get-Include.ps1")
Get-Include ".\any1.ps1"
...
Get-Include ".\any2.ps1"

но область видимости, видимо, страдает от такого включения.
Может есть какой дефолтный пакет для подобного поведения или как?
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Часто используемые функции можно сложить в модуль
Пример структуры:
MyUtils/
  MyUtils.psd1
  MyUtils.psm1
  functions/
    Get-Something.ps1
    Get-SomethingOther.ps1

Содержимое MyUtils.psd1, минимальный вариант. только заполненные поля
@{
  ModuleVersion = '1.0'
  GUID = '72d739dd-bddf-4d7c-a358-1a40e2ff961d'
  Description = 'MyUtils module'
  NestedModules = @('MyUtils.psm1')
}

Guid необходимо сгенерировать через [guid]::NewGuid()
Содержимое MyUtils.psm1
Try {
    Get-ChildItem "$PSScriptRoot\functions\*.ps1" -Exclude *.tests.ps1, *profile.ps1 |
    ForEach-Object {
      $Function = $_.Name
      . $_.FullName
    }
} Catch {
    Write-Warning ("{0}: {1}" -f $Function,$_.Exception.Message)
    Continue
}

Пример содержимого одной из функций
function Get-Something {
param(
  $parameter
)
  Write-Host "I'm Get-Something with $parameter"
}


Все дополнительные функции можно разрабатывать отдельно, а потом просто переносить в папку MyUtils\functions.
и они будут сами подключаться к модулю при его повторной загрузке вместе с powershell
или через Import-Module MyUtils -Force

Сам модуль в виде папки можно таскать простым копированием в одно из мест, определяемых через $env:PSModulePath
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы