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 :

Intégrer une fonction dans chaque script


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2018
    Messages : 15
    Par défaut Intégrer une fonction dans chaque script
    Bonjour alors voilà je m'explique j'ai ce début de code dans tout mes scripts

    Code PowerShell : 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
    $printlog1 ="\\s.....\d$\opcon\logs\printlog1.txt"
     
    $CurrentScript = "$PSCommandPath".Substring($PSScriptRoot.Length+1) 
    $CS = $CurrentScript.PadRight(20)
     
    $CST = $CS + " " + (get-date -Format G) + " " + $MSGLOG01
     
     
    Function Add-PrintLog
        (
        [PARAMETER(Mandatory=$true, HelpMessage='My First Argument')][string]$MSGLOG01
        )
        {
     
    $CST = (get-date -Format G) + "  " + $CS + " " + $MSGLOG01
    Write-host $MSGLOG01 -ForegroundColor black -BackgroundColor darkgray
    Add-Content $printlog1 $CST
        }

    Celui-ci me permet d’intégrer dans une log tout les éléments que je désire avec la commande

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
     Add-PrintLog -MSGLOG01

    et ceci pour tous mes scripts (tout va dans la même LOG exigence de la direction).

    Je voudrai en faire une fonction ou un module pour que je n'ai pas à le mettre a chaque début de mes scripts.
    Pourriez-vous m'aider?

    Merci d'avance,

  2. #2
    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
    Billets dans le blog
    1
    Par défaut
    Salut,
    tu peux copier tout ton code dans un fichier .pms1 et puis faire un import-module dans chaque script (modifier chaque script).
    Ou charger le module AVANT d'appeler le moindre script (le chargement du module étant une sorte d'initialisation du contexte) puis utiliser simplement Add-PrintLog.

    Premier soucis, ton module est lié à ton traitement (path du log), pas grave pour changer le chemin pour d'autres traitement on crée un autre module qui fait la même chose mais avec un autre nom ( je déconne ).
    L'autre déjà plus gênant est de connaitre l'appelant (le nom du producteur du log) soit tu le passes à chaque appel soit tu lis la pile d'appel (get-pscallstack).
    En passant comme on ne connait pas les usages, le write-host peut poser pb dans certains contexte d'exécution, ensuite si tu utilises ton traitement sur un serveur Citrix le nom de ton fichier sera identique pour chaque session

    Je ne pense pas que ma réponse t'aidera, perso j'utilise ceci quand je le peux, il en existe d'autres sur Github.

    Et je ne comprend pas ceci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $CST = $CS + " " + (get-date -Format G) + " " + $MSGLOG01
    Car $MSGLOG01 est déclaré comme paramètre de ta fonction.

  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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par JulesP Voir le message
    j'ai ce début de code dans tout mes scripts
    Tu peux aussi utiliser le dotsource pour charger un script externe et ainsi ne pas recopier le code. Mais là ceci dépend de la structure de tes répertories de scripts.

  4. #4
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2018
    Messages : 15
    Par défaut
    Merci pour ces réponses, maintenant un petit tuto pour la création d'un module, parce que la je suis un peu perdu....

  5. #5
    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
    Billets dans le blog
    1
    Par défaut
    Un tuto, rédigé avec la version 2 de Powershell. Depuis il y a eu qq améliorations/corrections. Mnt les modules prérequis sont chargés

    Un exemple rapido à partir de ton code :
    Code powershell : 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
     
    @'
    $Script:LogFileName ="C:\temp\LogFileName.txt"
     
    #$CurrentScript = "$PSCommandPath".Substring($PSScriptRoot.Length+1) 
    #$Script:CS = $CurrentScript.PadRight(20)
    #$CST = $CS + " " + (get-date -Format G) + " " + $MSGLOG01
     
     
    Function Add-Log {
        [cmdletBinding()]
     Param(
        [PARAMETER(Mandatory=$true, HelpMessage='My First Argument')]
       [string] $MSGLOG01
     )
     
       $CallerScript=$PSCmdlet.SessionState.PSVariable.GetValue('PSCommandPath')
       Write-Debug  $CallerScript
     
       $CallerScriptRoot=$PSCmdlet.SessionState.PSVariable.GetValue('PSScriptRoot')
       Write-Debug $CallerScriptRoot
     
       $Caller=$CallerScript.Substring($CallerScriptRoot.Length+1)
     
       $Header = (get-date -Format G) + '  ' + $($Caller.PadRight(20)) +' '
     
       $CST = $Header + $MSGLOG01
       Write-host $MSGLOG01 -ForegroundColor black -BackgroundColor darkgray
       Add-Content $LogFileName $CST
     
       $CallStack="Call Stack`r`n$(Get-PSCallStack|Out-String)"
       Write-Debug $CallStack
     
       Add-Content $LogFileName $CallStack
     
       Add-Content $LogFileName 'La suite'
    }
     
    Function Get-LogFileName{
        param()
     return  $Script:LogFileName
    }
     
    Export-ModuleMember -Function 'Add-Log','Get-LogFileName'
    '@ > c:\temp\Log.psm1
     
    @'
    Import-Module C:\temp\Log.psm1 -force
    "Fait qq chose"
    Add-Log 'Message 1'
    '@ > c:\temp\CallLog.ps1
     
    cd c:\temp
    .\CallLog.ps1
    $F=get-LogFileName
    type $F
    Je te laisse regarder ça et peiner un peu

  6. #6
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2018
    Messages : 15
    Par défaut
    Re bonjour,

    Bon j'avoue la je galère j'ai essayé différente méthode, mais je n'y arrive vraiment pas.
    quand je crée le module pas de soucis, mais soit il garde le nom du module sois il ne fait rien,
    Il me fraudait vraiment un exemple pour comprendre.

    Merci d'avance,

  7. #7
    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
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par JulesP Voir le message
    Bon j'avoue la je galère
    Je veux bien te croire :-)
    Citation Envoyé par JulesP Voir le message
    Il me fraudait vraiment un exemple pour comprendre.
    Je t'en ai fournis un à partir de ton script et je l'ai testé rapido sous PS v5.1
    L'inverse est peut être préférable communique nous ce que tu as fait et avec ça on verra ce qu'il manque ou ce qu'il y en trop

Discussions similaires

  1. [Free Pascal] Appeler une fonction dans un script Lua
    Par Roland Chastain dans le forum Free Pascal
    Réponses: 4
    Dernier message: 08/02/2015, 11h55
  2. Réponses: 8
    Dernier message: 27/08/2009, 13h01
  3. Réponses: 4
    Dernier message: 01/04/2008, 15h24
  4. [JS] Appeler une fonction dans un script externe
    Par agent007se dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/03/2007, 12h30
  5. Réponses: 8
    Dernier message: 30/08/2006, 10h08

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