5

ScénarioPowerShell gestion des dépendances

dossier PowerShell My contient une bibliothèque de scripts utilitaires. Je l'ai partagé et la version contrôlée avec GitHub entre mon travail et les ordinateurs à la maison. Au travail, j'ai maintenant un certain nombre de projets où je veux profiter de ma bibliothèque de scripts.

Problème

Lorsque je mets à jour le script utilitaire, je ne veux pas le copier manuellement à tous les projets de travail où il est utilisé.

solutions possibles

  1. (Simple)

    écrire une fonction PowerShell pour copier ma bibliothèque de script à un répertoire «dépendances \ Scripts dans le répertoire de travail pour chaque projet de script . Au fur et à mesure que ma bibliothèque de scripts se développe, il peut devenir difficile pour les autres de trouver les scripts de bibliothèque qui sont pertinents pour le projet de script.

  2. (overcomplicated?)

    Utilisez une sorte de 'exige' la fonction dans chaque fichier script de projet de travail qui requiert l'un des scripts de bibliothèque. Lorsqu'un script de bibliothèque est mis à jour, un outil peut alors décider quels projets de travail nécessitent ce script de bibliothèque et copier la dernière version dans le projet de travail. Si un script est exécuté sans la dépendance appropriée, une erreur se produira en rappelant à l'utilisateur comment obtenir la dernière version de la bibliothèque.

Questions

  • Quelqu'un at-il résolu ce problème avant?
  • Existe-t-il des outils de gestion des dépendances pour PowerShell qui vont faire 2?

Répondre

0

Une solution simple serait d'utiliser quelque chose comme DropBox. Vous pouvez voir comment je l'utilise pour mes scripts PowerShell ici: http://www.ravichaganti.com/blog/?p=1963

Vous pouvez obtenir un compte DropBox avec 2 Go d'espace libre http://db.tt/1DID1mR. 2 Go, à mon avis, est plus que suffisant pour les scripts simples. Il y a aussi d'autres choix sur le marché. Cependant, je recommande DropBox. Le compte gratuit prend en charge la restauration des versions de fichiers de 30 jours.

1

J'ai créé pour vous une solution qui, je pense, conviendra à votre situation. Je l'ai créé en me basant sur la méthodologie de la playlist. J'ai créé un document XML dans lequel vous répertoriez chacun de vos scripts individuellement et dans un autre nœud du même document, vous répertoriez les scripts que vous souhaitez copier pour chaque projet. J'ai créé un exemple de travail ci-dessous. Bien qu'il ne soit pas élégant quand il s'agit de gérer quelques centaines de fichiers de script ou beaucoup de projets, mais il fait le travail.

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>