PowerShell 依赖管理

6

情景

我的PowerShell文件夹包含一些实用脚本的库。我将它们分享并使用GitHub进行版本控制,以便在工作和家庭电脑之间共享。现在我有很多项目需要利用我的脚本库。

问题

当我更新一个实用脚本时,我不想手动复制到所有使用该脚本的工作项目中。

可能的解决方案

  1. (简单)

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

  2. (过于复杂?)

    在每个工作项目脚本文件中使用某种“requires”函数来要求其中一个库脚本。当库脚本被更新后,工具可以确定哪些工作项目需要该库脚本,并将最新版本复制到工作项目中。如果运行脚本时没有适当的依赖项,则会抛出错误,提醒用户如何从库中获取最新版本。

问题

  • 有人解决过这个问题吗?
  • 是否有现有的PowerShell依赖项管理工具可以实现2?
3个回答

2

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
    }
}

XML文件

<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>

0

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

您可以通过http://db.tt/1DID1mR获取一个带有2GB免费空间的DropBox账户。在我看来,2GB对于简单的脚本已经足够了。市场上也有其他选择,但我推荐使用DropBox。免费账户支持恢复30天前的文件版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接