Exécution distante Windows

De SOS Paris
Aller à : navigation, rechercher

Lorsqu'il n'existe aucun agent de soumission sur la machine cible, il est toujours possible d'ordonnancer le job et d'utiliser d'autres moyens d'exécution.
Dans le cas contraire, s'en référer à l'article suivant : Exécution sur une machine distante

Cet article récapitule les différentes méthodes utilisables en fonction des versions et des installations Windows.

Le but est de lancer le batch c:\temp\test.bat contenant le script suivant:

@echo off
echo Execution !
echo Ecriture dans un log > c:\temp\test.log

PSExec

Le Psexec est un client de la bibliothèque PSTools qui permet d'exécuter une commande distante après avoir installé, à la volée, un service sur la machine distante.

C:\temp\pstools>psexec.exe \\MACHINE_DISTANTE "C:\temp\test.bat"

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\temp\test.bat exited with error code 3.

WMIC

Le WMIC est l'appel en ligne de commande des Windows Management Instrumentation.

C:\temp\pstools>wmic /node:MACHINE_DISTANTEprocess call create "C:\temp\test.bat"
Executing (Win32_Process)->Create()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
        ProcessId = 12868;
        ReturnValue = 0;
};

SchTasks

Lorsqu'une tâche planifiée est déjà planifiée, il peut être intéressant de bénéficier de la définition en place et utiliser l'ordonnanceur pour le déclenchement de l'exécution.

Définition:

C:\temp\pstools>schtasks /tn "test eric" /query /xml
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2015-02-06T09:55:38.9768027</Date>
    <Author>VAUDOISE\d-eat</Author>
    <Description>juste un test pour controler une tache</Description>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2015-02-06T09:54:49.2208345</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByWeek>
        <DaysOfWeek>
          <Monday />
        </DaysOfWeek>
        <WeeksInterval>1</WeeksInterval>
      </ScheduleByWeek>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <RunLevel>LeastPrivilege</RunLevel>
      <UserId>VAUDOISE\d-eat</UserId>
      <LogonType>InteractiveToken</LogonType>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>c:\temp\test.bat</Command>
      <Arguments>eric test</Arguments>
      <WorkingDirectory>c:\temp</WorkingDirectory>
    </Exec>
  </Actions>
</Task>

Exécution:

C:\temp\pstools>schtasks /s MACHINE_DISTANTE /tn "test eric" /run
SUCCESS: Attempted to run the scheduled task "test eric".