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>