none
Execution d'un script sur un serveur distant RRS feed

  • Question

  • Bonjour,

    je souhaiterais executer depuis un serveur [ICI A] des scripts de manière planifié (script bat) vers d'autres serveurs de mon parc [ICI B].

    exemple de script : delete-txt-file.bat

    [code]

    forfiles /P "D:\toto\tata" /m *.txt /d -2 /c "cmd /c del /q @path && echo @path >> D:\titi\logs\txt-delete-file.%date:~6,4%%date:~3,2%%date:~0,2%..log"

    [/code]

    cependant, le script en lui même, je souhaiterai qu'il soit sur mon serveur "executeur de bat" (A) et non sur le serveur cible (B)

    j'ai rapidement testé cela, mais sans succès

    [code]

    psexec \\serveurB '\\serveur1\D$\repertoire-script\delete-txt-file.bat'  /u mondomaine\admin.alex /p 123456

    [/code]

    Merci de votre aide

    Cordialement


    jeudi 2 octobre 2014 14:55

Réponses

  • Vous pouvez faire un script sur le serveur A qui créer une tache planifiée sur le serveur B qui lance le script sur le serveur B.

    Si vous voulez entrer dans la modernité, vous regardez Powershell et le Remoting, qui permet d'executer des scripts sur des serveurs distants.


    Bruce Jourdain de Coutance - Consultant MVP Exchange http://blog.brucejdc.fr


    jeudi 2 octobre 2014 15:20
  • Bonjour,

    Sans vouloir vous faire succomber dans Windows Powershell, tentez la commande suivante pour votre expérimentation :

    Get-ChildItem -Path Q:\Toto\Tata\* -Filter *.txt | 
      Select-Object FullName | 
      Export-Csv "Q:\Toto\Logs\txt-echo-file$((Get-Date).Year)$((Get-Date).Month)$((Get-Date).Day).log" -NoTypeInformation;

    Puis celle-ci pour vos serveurs :

    Invoke-Command -ComputerName (Get-Content Q:\Toto\Logs\Serveurs.txt) -ScriptBlock { 
      Get-ChildItem -Path Q:\Toto\Tata\* -Filter *.txt |
      Select-Object FullName | 
      Export-Csv "Q:\Toto\Logs\txt-echo-file$((Get-Date).Year)$((Get-Date).Month)$((Get-Date).Day).log" -NoTypeInformation 
    };
    
    # Serveurs.txt contient la liste de vos serveurs.

    Merci pour votre retour,
    Charlie


    Charlie Dancoisne - Independent Consultant & Trainer



    jeudi 2 octobre 2014 20:11

Toutes les réponses

  • Vous pouvez faire un script sur le serveur A qui créer une tache planifiée sur le serveur B qui lance le script sur le serveur B.

    Si vous voulez entrer dans la modernité, vous regardez Powershell et le Remoting, qui permet d'executer des scripts sur des serveurs distants.


    Bruce Jourdain de Coutance - Consultant MVP Exchange http://blog.brucejdc.fr


    jeudi 2 octobre 2014 15:20
  • Bonsoir,

    la création d'un script sur le serveur A qui fait la tache planifié sur le serveur B qui va effectuer lui même le script qui doit se trouver sur B n'est pas la solution que je souhaite dans la mesure où je veux que ma source du script reste sur A. Ou alors il faut que je crée un script qui en 2 étapes, 1 copie la source du script sur le serveur cible et 2 crée la tache planifié qui ira pointer vers la copie de mon dit script fraichement apparu!

    Quant au remoting, ça semble quand même assez touchy

    vous n'avez rien d'intermediaire?!!

    Cdlt

    jeudi 2 octobre 2014 18:59
  • Bonjour,

    Sans vouloir vous faire succomber dans Windows Powershell, tentez la commande suivante pour votre expérimentation :

    Get-ChildItem -Path Q:\Toto\Tata\* -Filter *.txt | 
      Select-Object FullName | 
      Export-Csv "Q:\Toto\Logs\txt-echo-file$((Get-Date).Year)$((Get-Date).Month)$((Get-Date).Day).log" -NoTypeInformation;

    Puis celle-ci pour vos serveurs :

    Invoke-Command -ComputerName (Get-Content Q:\Toto\Logs\Serveurs.txt) -ScriptBlock { 
      Get-ChildItem -Path Q:\Toto\Tata\* -Filter *.txt |
      Select-Object FullName | 
      Export-Csv "Q:\Toto\Logs\txt-echo-file$((Get-Date).Year)$((Get-Date).Month)$((Get-Date).Day).log" -NoTypeInformation 
    };
    
    # Serveurs.txt contient la liste de vos serveurs.

    Merci pour votre retour,
    Charlie


    Charlie Dancoisne - Independent Consultant & Trainer



    jeudi 2 octobre 2014 20:11
  • Mhmmm!!

    merci pour votre contribution Charlie, néanmoins, cela ne répond pas totalement à mes attentes.

    En effet, vous venez dans votre premier ps1 de réécrire mon script forfiles, qui à contrario du mien ne liste mais ne supprime pas le fichier!! Mais le sujet n'est pas là, car ce n'est pas en réalité l'objet de ma demande.

    quant au second script, je vais néanmoins essayer de m'en inspirer en y collant en lieu et place du contenu du 1°ps1 le contenu du bat


    jeudi 2 octobre 2014 20:59
  • Bonjour,

    En effet, j'ai oublié d'inclure la commande de suppression de fichiers que voici :

    Invoke-Command -ComputerName (Get-Content Q:\Toto\Logs\Serveurs.txt) -ScriptBlock { 
      Get-ChildItem -Path Q:\Toto\Tata\* -Filter *.txt |
      Select-Object FullName | 
      Export-Csv "Q:\Toto\Logs\txt-echo-file$((Get-Date).Year)$((Get-Date).Month)$((Get-Date).Day).log" -NoTypeInformation;
      Remove-Item -Path Q:\Toto\Tata -Filter *.txt -Force
    };
    
    # Serveurs.txt contient la liste de vos serveurs.

    La version ci-dessous avec des commandes "DOS" que vous connaissez déjà :-)

    Invoke-Command -ComputerName (Type Q:\Toto\Logs\Serveurs.txt) -ScriptBlock { 
      Dir Q:\Toto\Tata\*.txt | Select-Object FullName | 
      Export-Csv "Q:\Toto\Logs\txt-echo-file$((Get-Date).Year)$((Get-Date).Month)$((Get-Date).Day).log" -NoTypeInformation;
      Del Q:\Toto\Tata\*.txt -Force
    };
    
    # Serveurs.txt contient la liste de vos serveurs.


    Charlie Dancoisne - Independent Consultant & Trainer


    vendredi 3 octobre 2014 01:12
  • Oo :) ça troll même sur les serveurs technet en mettant en rivalité les vieux scriptants des commandes Dos et les Powershelliens!!!

    je vous tiens au courant

    vendredi 3 octobre 2014 07:51