PowerShell依赖关系管理

时间:2011-03-05 08:21:02

标签: deployment powershell dependencies project dependency-management

方案

我的PowerShell文件夹包含一个实用程序脚本库。我在工作和家用电脑之间使用GitHub进行共享和版本控制。在工作中,我现在有许多项目,我想利用我的脚本库。

问题

当我更新实用程序脚本时,我不想手动将其复制到使用它的所有工作项目。

可能的解决方案

  1. (简单)

    编写PowerShell函数,将我的整个脚本库复制到每个脚本项目的工作目录下的“Dependencies \ Scripts”目录中。随着我的脚本库的增长,其他人可能很难找到与脚本项目相关的库脚本。

  2. (过于复杂?)

    在每个需要一个库脚本的工作项目脚本文件中使用某种“需求”功能。更新库脚本后,工具可以决定哪些工作项目需要该库脚本并将最新版本复制到工作项目。如果在没有相应依赖关系的情况下运行脚本,则会引发错误,提醒用户如何从库中获取最新版本。

  3. 问题

    • 以前有人解决了这个问题吗?
    • 是否存在PowerShell的现有依赖关系管理工具2?

3 个答案:

答案 0 :(得分:1)

我为您创建了一个适合您情况的解决方案。我是根据歌曲播放列表方法创建的。我创建了一个xml文档,您可以在其中单独列出每个脚本,并在同一文档的另一个节点中列出要为每个项目复制的脚本。我在下面创建了一个工作示例。虽然在管理几百个脚本文件或很多项目时它并不优雅,但它可以完成工作。

PS1脚本

[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 :(得分:1)

您考虑过NuGet了吗?它支持包依赖,updatesprivate repositories

另请参阅:Use Nuget to Share PowerShell Modules in your Enterprise

答案 2 :(得分:0)

一个简单的解决方案是使用像DropBox这样的东西。您可以在此处查看我如何将其用于我的PowerShell脚本:http://www.ravichaganti.com/blog/?p=1963

您可以获得具有2GB可用空间http://db.tt/1DID1mR的DropBox帐户。在我看来,2GB对于简单的脚本来说已经足够了。市场上还有其他选择。但是,我推荐DropBox。免费帐户支持恢复30天的文件版本。