IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Problème appel de fonction [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Nouveau membre du Club Avatar de botLIA
    Homme Profil pro
    Étudiant en Licence 3 CDA
    Inscrit en
    Juin 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant en Licence 3 CDA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 45
    Points : 29
    Points
    29
    Par défaut Problème appel de fonction
    Bonjour,

    J'ai un problème sur mon script PowerShell que je ne comprend pas,
    j'ai une page "cas2.ps1" qui est un peut le programme principal qui gère un cas d'exception n°2, dans cette page en haut j'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Import-Module .\formatNomPrenom.ps1
    "formatNomPrenom.ps1" est une page de fonction dont une qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    function formatNom([string]$val){
        # Formatage du nom ou du prénom au format AD
        # Ajout au fichier paramètres
        # Importation des modules
        Import-Module .\creationLog.ps1
    
        # Création de l'objet Excel
        $excel = New-Object -ComObject Excel.Application
        $excel.Visible = $false
        $excel.DisplayAlerts = $false
    
        # Ouverture du fichier paramètres
        Write-Host "Ouverture du fichier parametres" -ForegroundColor Blue
        try{
            $workbook = $excel.Workbooks.Open("C:\Users\ltanne\Desktop\preprod\parametres\feuille.xlsx")
            $worksheet = $workbook.Worksheets.item("Parametres")
            $worksheet.Activate()
            $ouvertParam = $true
            $chaine = "Ouverture du fichier paramètres : OK"
            majLog $chaine
        }catch{
            $ouvertPram = $false
            Write-Host "Le fichier ne s'ouvre pas, veuillez vérifier le nom : " -ForegroundColor Red
            Write-Host "qu'il se trouve bien dans le bon dossier 'parametres'," -ForegroundColor Red
            Write-Host "qu'il n'a pas été déplacer ou supprimer" -ForegroundColor Red
            $chaine = "Impossible d'ouvrir le fichier parametres : fichier formatNomPrenom.ps1"
            majLog $chaine
        }
    
        # Nombre total de ligne dans le fichier
        $ligneTotal = $worksheet.UsedRange.Rows.count
    
        # Modification de la chaine
        $colonne = 39
        $ligne = 2
    
        # Écrit la chaine dans le fichier paramètre
        Write-Host "MAJ PARAMETTRE EN COUR..."
        for($ligne = 2; $ligne -le $ligneTotal; $ligne++){
            if($worksheet.Cells.Item($ligne, $colonne).Value() -eq " "){
                Write-Host $worksheet.Cells.Item($ligne, $colonne).Value()
                $worksheet.Cells.Item($ligne, $colonne) = $nom
                $newLigne = $ligne
            }
        }
    
        # Recherche par carractère, ceux à remplacé
        Write-Host "RECHERCHE EN COUR..."
        $longueur = $nom.Length
        $colonne = 45
        for($nb = 0; $nb -le $longueur; $nb++){
            if($chaine[$nb] -eq "'"){
                $nom = $nom -replace $nom[$nb], " "
            }
            # Parcour des carractères spéciaux
            for($ligne = 2; $ligne -le $ligneTotal; $ligne++){
                if($worksheet.Cells.Item($ligne, $colonne).Value() -eq $nom[$nb]){
                    $nom = $nom -replace $nom[$nb], $worksheet.Cells.Item($ligne, ($colonne + 1)).Value()
                    break
                }
            }        
        }
        $nom = $nom.ToUpper()
        Write-Host "Fermeture du fichier paramètre" -ForegroundColor Red
        $workbook.Save()
        $workbook.Close()
        $excel.Quit()
    
        return $nom
    }
    J'exécute cette fonction avec le code suivant dans le fichier "cas2.ps1" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # Attributon du nom
        $nom = $Salarie.nomRh
        # Ligne et colonne de départ dans le fichier paramètres
        Write-Host "Formatage du nom" -ForegroundColor Red
        $ligne = 2
        $colonne = 39
        $trouve = $false
        for($ligne = 2; $ligne -le $ligneTotal; $ligne++){
            if($worksheet.Cells.Item($ligne, $colonne).Value() -eq $nom){
                $newNom = $worksheet.Cells.Item($ligne, $colonne).Value()
                $trouve = $true
            }
        }
        if($trouve.Equals($false)){
            # Ajout d'un nouveau nom et formatage du nom manuelement
            $newNom = formatNom $nom
        }
        $NewSalarie.nom = $newNom
    Quand la fonction est exécuté une première fois ca fonctionne sans problème mais quand elle est exécuté une deuxième fois elle affiche l'erreur suivante :
    Nom : Capture.PNG
Affichages : 1000
Taille : 12,7 Ko

    Avez-vous une idée ?

    Merci d'avance

  2. #2
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2018
    Messages : 43
    Points : 46
    Points
    46
    Par défaut
    Salut,

    Ah les joies du scripting et du "WTF?!"
    Ton import-module il est bien fait en tout début de ton fichier cas2.ps1?
    Tes boucles sont toutes bien ouvertes et fermées? Ça peut paraître con mais j'ai déjà vu ISE ne pas remarquer ce genre d'erreur et du coup ça foire tout.

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par mrtrez Voir le message
    Ah les joies du scripting et du "WTF?!"
    Je pense que celle-là je vais la coller à côté de mon écran !
    Accoler avec la photo d'une poule devant une fourchette, je sais c'est méchant.
    Mais le fautif n'est pas celui que l'on croit.

    Citation Envoyé par botLIA Voir le message
    "formatNomPrenom.ps1" est une page de fonction dont une qui est :
    Quoi qu'est-ce 'une page de fonction' en Powershell ?
    Evite d'importer un fichier .ps1 en tant que module, cela n'en fait pas un module.

  4. #4
    Nouveau membre du Club Avatar de botLIA
    Homme Profil pro
    Étudiant en Licence 3 CDA
    Inscrit en
    Juin 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant en Licence 3 CDA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Salut,

    Oui surtout du WTF mdrr

    Ce que j'appelle une page de fonction c'est une page, dans ce cas en .ps1 qui contient plusieurs fonctions (j'utilise ce terme dans tout les langages c'est un peu ma façon de les appelé ).
    Et le Import-Module c'est le moyen que j'ai trouvé pour pouvoir utilisé mes objets et mes fonctions, mais si tu as une autre idée plus conventionnel je prend

    J'ai vérifié mes boucles et oui elles sont bien écrite.

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2018
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2018
    Messages : 43
    Points : 46
    Points
    46
    Par défaut
    Erf, strange. Pourtant ça me parle comme bug...
    Reprenons.
    Tu executes ton script cas2.ps1 qui importe ton autre script .PS1 qui contient la fonction FormatNom.
    Ton Import-Module est fait en tout début de script et sans être contenu dans une boucle?
    Aussi, essaye de passer ton deuxième fichier en .psm1 et modifier l'import-module pour voir.

    +

  6. #6
    Nouveau membre du Club Avatar de botLIA
    Homme Profil pro
    Étudiant en Licence 3 CDA
    Inscrit en
    Juin 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant en Licence 3 CDA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    Tu executes ton script cas2.ps1 qui importe ton autre script .PS1 qui contient la fonction FormatNom.
    Oui c'est sa

    Mon Import-Module n'est pas dans une boucle, c'est l'appel de la fonction qui est dans une condition.

    Au final j'ai résolus le problème j'ai supprimé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function formatNom([$val]){}
    et j'ai mis dans la page tout au début :
    Pour exécuté cette page dans le fichier cas2.ps1, j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if($trouve.Equals($false)){
            # Ajout d'un nouveau nom et formatage du nom manuelement
            $newNom = .\formatNom.ps1 $nom
        }
    Et dans mon fichier cas2.ps1 j'ai enlevé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Import-Module .\formatNomPrenom.ps1
    Et ca fonctionne comme une fonction mais du coup j'ai deux fichiers au lieu d'un seul, un qui formate le nom et un autre qui formate le prénom, pas grave
    Mais c'étais étrange parce que j'ai fais de la même manière (par fonction et avec Import-Module) et ca à toujours fonctionné, mais là ca à été le seul cas.
    Merci quand même pour votre aide ,
    à réfléchir sur le sujet.
    psm1 c'est des fichiers de modules c'est sa ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème appel de fonction
    Par pepsi33 dans le forum C++
    Réponses: 7
    Dernier message: 30/09/2007, 14h03
  2. Problème appel de fonction
    Par pepsi33 dans le forum C++
    Réponses: 1
    Dernier message: 30/09/2007, 11h40
  3. problème appel à une fonction pl/sql
    Par tommey dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2007, 14h19
  4. [PHP-JS] Problème appel de fonction php
    Par Didibzh dans le forum Langage
    Réponses: 10
    Dernier message: 12/06/2007, 16h55
  5. Réponses: 10
    Dernier message: 08/12/2006, 02h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo