Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

Import Allmodules

Publié le par damcuvelier

Permet d'écrire ses modules sans avoir à se soucier de l'ordre d'import et en les appelant les uns les autres dans les désordres sans se prendre la tête avec les règles d'appel powershell :

 

# Fonction pour obtenir la liste des modules à importer

function Get-AllModules {

    param (

        [string]$chemin

    )

    

    # Vérifiez si le répertoire existe

    if (-not (Test-Path -Path $chemin -PathType Container)) {

        Write-Error "Le chemin spécifié n'existe pas : $chemin"

        return

    }

 

    # Liste des fichiers .psm1 dans le répertoire spécifié

    $fichiers = Get-ChildItem -Path $chemin -Filter *.psm1

 

    # Initialiser un tableau pour stocker les résultats

    $resultats = @()

 

    # Dictionnaire pour suivre les définitions des termes

    $definitions = @{}

 

    # Fonction pour ajouter des termes définis dans le dictionnaire

    function Ajouter-Definitions {

        param (

            [string]$nomFichier,

            [string[]]$termes

        )

        

        foreach ($terme in $termes) {

            if (-not $definitions.ContainsKey($terme)) {

                $definitions[$terme] = @()

            }

            if (-not $definitions[$terme] -contains $nomFichier) {

                $definitions[$terme] += $nomFichier

            }

        }

    }

 

    # Fonction pour ajouter les résultats dans l'ordre désiré

    function Ajouter-Resultat {

        param (

            [string]$nomFichier,

            [string[]]$termes

        )

        

        foreach ($ligne in $termes) {

            # Ajouter le fichier courant

            $resultats += $nomFichier

 

            # Ajouter les fichiers où les termes sont définis

            if ($definitions.ContainsKey($ligne)) {

                $resultats += $definitions[$ligne]

            }

        }

    }

 

    # Analyse de chaque fichier pour découvrir les termes utilisés

    foreach ($fichier in $fichiers) {

        $contenu = Get-Content -Path $fichier.FullName

        $termesTrouves = @()

        

        # Cherche les termes utilisés dans le fichier

        foreach ($ligne in $contenu) {

            if ($ligne -match '(\$\w+|\-\w+|\(\$\w+\))') {

                $termes = $matches[0] -replace '[\$\-\(\)]', '' # Nettoyer les caractères spéciaux

                $termesTrouves += $termes

            }

        }

        

        # Ajouter les définitions des termes trouvés

        Ajouter-Definitions -nomFichier $fichier.Name -termes $termesTrouves

        

        # Ajouter les résultats en fonction des termes trouvés

        Ajouter-Resultat -nomFichier $fichier.Name -termes $termesTrouves

    }

 

    # Convertir le tableau de résultats en une chaîne avec des virgules

    $resultString = $resultats -join ','

 

    # Éliminer les doublons consécutifs

    $cleanedResultString = $resultString -replace '(,)(?=\1)', ''

 

    # Retourner le résultat nettoyé

    return $cleanedResultString

}

 

# Exemple d'utilisation de la fonction et importation des modules

$chemin = "C:\temp\mods"

$allmodsresult = Get-AllModules -chemin $chemin

 

# Importer les modules

foreach ($mod in $allmodsresult.Split(',')) {

    $modulePath = Join-Path -Path $chemin -ChildPath $mod

    Import-Module -Name $modulePath -Global -Force | Out-Null

}

 

Commenter cet article