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 :

Variable en sortie d'Invoke-Command [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 14
    Par défaut Variable en sortie d'Invoke-Command
    Bonjour,

    Je souhaite pouvoir récupérer le ou les résultats des différentes commandes lancés dans invoke-command, je ne trouve pas comment faire.
    Pour commencer simplement, comment puis je récupérer la valeur $Jeton à la sortie d' invoke-command qui passe de 0 à 1 ou 2 en fonction de la présence du fichier ou non?

    Exemple:
    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
    $OldServer           = "Comput1" 
    $VM_Nom             = "Comput2"
    $Jeton                  = "0"
    $BizInI                  = "D:\applicat\prog\bizerba\BIZTRACK\biztrack.ini"
    $pattern                = "NOM_SERVEUR_FICHIER_HF_CS=$OldServer"
    $pattern1              = "NOM_SERVEUR_FICHIER_HF_CS=$VM_Nom"
    
    $Biz                     =  Invoke-Command -session $RemoteSession -scriptblock {
    
            param( $VM_Nom, $OldServer,  $BizInI, $Jeton, $pattern, $pattern1 )
    
           If ( !( Test-Path $BizInI ) ) 
           {
             Write-Host "Le fichier Biztrack.ini est innaccessible ou inexistant" -ForegroundColor Red
             Write-Host  "Arrêt du script"
             $Jeton                = "2"
             Exit
           }
       Else    
           {
             Write-Host "Modification du champs NOM_SERVEUR du fichier Biztrack.ini" -ForegroundColor Green
             ( ( Get-Content $BizInI ).Replace( $pattern, $pattern1 ) ) | Set-Content $BizInI
             $Jeton                = "1"
           }
     } -ArgumentList ( $VM_Nom, $OldServer, $BizInI, $Jeton,  $pattern, $pattern1 )

  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,
    PS étant basé sur le pipeline utilise la cmdlet Write-Output qui écrit la donnée dans le pipeline :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      #Soit directement
     Write-Output 2
       #Soit indirectement
     Write-Output $Jeton
    Rappel :
    Dans ce cas les objets sont sérialisés, avec certains types on peut ne pas retrouver leur type d'origine. Ici pas de pb.
    L'imbrication d'objet peut quelque fois nécessiter de modifier la profondeur de sérialisation.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 14
    Par défaut
    Rebonjour,

    Merci de votre aide mais une fois mon script terminé et que je tape $jeton, la valeur n'a pas changé.
    En gros votre proposition ne fonctionne pas.
    Avez vous une autre idée svp ou peut être que soit je fait mal soit j'ai mal expliqué mon pb?

    En résumé
    1-J'ai un script qui utilise invoke-command pour executer des commandes sur un serveur distant
    2-j'ai une variable qui est à 0
    3-je lance invoke-command -scriptblock{}
    4-la variable est modifié dans invoke-command
    5-je veux récupérer dans mon script ce nouvel état de la variable une fois invoke-command terminé et pouvoir l'utiliser et le manipuler

    merci d'avance

  4. #4
    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 lavocatb Voir le message
    soit j'ai mal expliqué mon pb?
    Tu indiquais :
    Citation Envoyé par lavocatb Voir le message
    ...récupérer la valeur $Jeton à la sortie d' invoke-command...
    Essaie ceci :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Jeton= Invoke-Command...
    Citation Envoyé par lavocatb Voir le message
    4-la variable est modifié dans invoke-command
    Non, Invoke-Command renvoie une valeur, un objet. Ce n'est pas la même variable car le code appelant et celui appelé utilise des contextes différents qui ne partage aucune donnée.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 14
    Par défaut
    Si je comprends bien, il n'est pas possible de récupérer différents résultats à la sortie de invoke-command -Scriptblock{} ?
    On peut injecter des variables via Param($var1, $var2) et -ArgumentList($var1, $var2) dans invoke-command mais pas l'inverse?

    Si c'est le cas je suis bien embêté.

  6. #6
    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 lavocatb Voir le message
    Si je comprends bien, il n'est pas possible de récupérer différents résultats à la sortie de invoke-command -Scriptblock{} ?
    Si.
    Tu peux récupérer une collection d'objets, dans le cas où tu récupères 3 objets (désérialisés) c'est à toi de définir à quelle variable tu les affectes:
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $Tableau=Invoke-commande {...}
    $MaVariable1=$Tableau[0]
    $MaVariable2=$Tableau[1]
    $MaVariable3=$Tableau[2]

    Citation Envoyé par lavocatb Voir le message
    On peut injecter des variables via Param($var1, $var2) et -ArgumentList($var1, $var2) dans invoke-command mais pas l'inverse?
    Oui, on paramètre un job et on récupère un résultat constitué d'un ou plusieurs objets.
    Ici un job crée un autre process windows qui à son tour crée une autre instance du runtime Powershell, c'est donc cloisonner.
    Ensuite l'échange de donnée entre les 2 process utilise la sérialisation.
    Tu trouveras d'autres infos dans le tutoriel sur le jobs.

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

Discussions similaires

  1. [PowerShell] Sortie de nombre et de texte depuis invoke-command
    Par lavocatb dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 07/10/2016, 17h08
  2. [PowerShell] Utiliser une variable dans un scriptblock de la commande Invoke-command
    Par arnaudperfect dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 20/07/2015, 14h40
  3. [Batch] Rediriger la sortie d'une commande vers une variable
    Par Merwyn dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 28/09/2012, 17h30
  4. Réponses: 8
    Dernier message: 19/09/2007, 16h51

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