Управление зависимостями PowerShell - PullRequest
5 голосов
/ 05 марта 2011

Сценарий

Моя папка PowerShell содержит библиотеку служебных скриптов.У меня есть общий доступ и контроль версий с GitHub между моими рабочими и домашними компьютерами.На работе у меня сейчас есть несколько проектов, в которых я хочу использовать свою библиотеку сценариев.

Проблема

Когда я обновляю служебный скрипт, я неЯ не хочу копировать его вручную во все рабочие проекты, где он используется.

Возможные решения

  1. (Простой)

    Напишите функцию PowerShell, чтобы скопировать всю мою библиотеку сценариев в каталог 'Dependencies \ Scripts' в рабочем каталоге для каждого проекта сценария.По мере роста моей библиотеки сценариев другим людям может быть трудно найти сценарии библиотеки, которые имеют отношение к проекту сценария.

  2. (Слишком сложно?)

    Используйте некоторую функцию 'require' в каждом файле сценария рабочего проекта, для которого требуется один из сценариев библиотеки.Когда скрипт библиотеки обновляется, инструмент может затем решить, для каких рабочих проектов требуется этот скрипт библиотеки, и скопировать последнюю версию в рабочий проект.Если скрипт запускается без соответствующей зависимости, он выдаст ошибку, напоминающую пользователю, как получить последнюю версию из библиотеки.

Вопросы

  • Кто-нибудь решал эту проблему раньше?
  • Существуют ли инструменты PowerShell для управления зависимостями, которые будут выполнять 2?

Ответы [ 3 ]

1 голос
/ 05 марта 2011

Я создал для вас решение, которое, я думаю, будет соответствовать вашей ситуации. Я создал его, основываясь на методологии воспроизведения песен. Я создал XML-документ, в котором вы бы перечислили каждый из ваших сценариев индивидуально, а в другом узле того же документа вы перечислите сценарии, которые вы хотите скопировать для каждого проекта. Я создал рабочий пример этого ниже. Хотя это не элегантно, когда речь идет об управлении несколькими сотнями файлов сценариев или множеством проектов, но оно выполняет свою работу.

PS1 Script

[xml]$XML = gc "C:\XMLFile1.xml"
$Scripts = $XML.Root.Scripts.Script
$Projects = $XML.Root.Projects.Project
foreach($Project in $Projects){
    $ProjectLocation = $Project.CopyPath
    $ProjectScripts = $Project.Script
    foreach($Script in $ProjectScripts){
        $ScriptPath = ($Scripts|?{$_.ID -eq $Script.ID}|Select Path).Path
        Copy-Item -Path $ScriptPath -Destination $ProjectLocation
    }
}

XMLFILE

<Root>
  <Scripts>
    <Script ID="1" Path="C:\1.PS1"></Script>
    <Script ID="2" Path="C:\2.PS1"></Script>
    <Script ID="3" Path="C:\3.PSM1"></Script>
  </Scripts>
  <Projects>
    <Project Name="Project1" CopyPath="\\Server\Share\Project1">
      <Scripts ID="1"/>
    </Project>
    <Project Name="Project2" CopyPath="C:\Projects\Project2">
      <Scripts ID="1"/>
      <Scripts ID="3"/>
    </Project>
  </Projects>
</Root>
1 голос
/ 06 сентября 2011
0 голосов
/ 05 марта 2011

Простым решением было бы использовать что-то вроде DropBox. Вы можете увидеть, как я использую его для своих скриптов PowerShell здесь: http://www.ravichaganti.com/blog/?p=1963

Вы можете получить аккаунт DropBox с 2 ГБ свободного места http://db.tt/1DID1mR. 2 ГБ, на мой взгляд, более чем достаточно для простых скриптов. Есть и другие варианты на рынке. Тем не менее, я рекомендую DropBox. Бесплатная учетная запись поддерживает восстановление 30-дневных версий файлов.

...