5

方案PowerShell的依赖管理

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

问题

当我更新的实用程序脚本,我不想手动复制它在那里使用的所有工作项目。

可能的解决方案

  1. (简单)

    写的PowerShell功能,我的整个脚本库工作目录下复制到“依赖\脚本”目录下为每个脚本项目。随着脚本库的增长,其他人可能很难找到与脚本项目相关的库脚本。

  2. (过于复杂?)

    使用某种类型的“要求”中,要求图书馆的一个脚本,每个工作项目的脚本文件的功能。当更新库脚本时,工具可以决定哪些工作项目需要该库脚本并将最新版本复制到工作项目中。如果脚本运行时没有适当的依赖关系,它会抛出一个错误提醒用户如何从库中获取最新版本。

问题

  • 有没有人解决这个问题呢?
  • 是否有现有的PowerShell依赖管理工具,将做2?

回答

0

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

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

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>