Aller au contenu

VTOM : Lancer des scripts windows en remote avec une queue vtom

Étape 1 : Comprendre la fonction de la queue vtom

La queue vtom est une fonctionnalité qui permet d’ajouter des tâches à une file d’attente et de les exécuter de manière asynchrone. Elle est utile pour gérer efficacement les tâches et les processus dans un environnement de production.

Étape 2 : Vérifier les prérequis nécessaires

Avant de pouvoir utiliser la queue vtom, vous devez vous assurer que l’utilisateur utilisé pour lancer la queue vtom est autorisé sur votre machine distante. Cette étape est particulièrement importante pour les utilisateurs de Windows, car la gestion des utilisateurs vtom peut être un peu étrange.

De plus, toutes les machines doivent être sur un réseau commun pour que la queue fonctionne correctement.

Étape 3 : Dédier une queue

Pour utiliser la queue vtom, vous devez d’abord dédier une queue et référencer celle-ci dans votre fichier vtom.ini. Pour cela, suivez les étapes suivantes :

  • Ouvrez votre fichier vtom.ini.
  • Trouvez la section [Queue] et ajoutez une nouvelle entrée pour votre queue.
  • Nommez la queue comme vous le souhaitez.
  • Ajoutez les informations de configuration requises, telles que l’emplacement de la file d’attente.

Étape 4 : Redémarrer l’agent vtom

Après avoir dédié une queue, vous devez redémarrer l’agent vtom pour qu’il prenne en compte les changements.

Étape 5 : Vérifier que la queue est présente

Pour vérifier que la queue a été créée avec succès, utilisez la commande bstat. Cette commande affichera toutes les files d’attente disponibles. Assurez-vous que votre nouvelle queue est répertoriée.

Étape 6 : passer une commande en admin

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "MAMACHINEDISTANTE" -Concatenate

Étape 7 : modifier votre nouvelle queue comme suit

@echo OFF

rem Force l'utilisation West European Latin
chcp 1252 > nul

rem Inclut le repertoire binaire powershell dans le path
set PATH_POWERSHELL=C:\WINDOWS\system32\WindowsPowerShell\v1.0
set PATH=%PATH_POWERSHELL%;%PATH%

call submit_aff.bat %*
echo _______________________________________________________________________
echo Debut de l'execution du script PowerShell... EN REMOTE
date /T
echo %time:~+0,8%
echo _______________________________________________________________________
echo "	######  ####### #     # ####### ####### #######"
echo "	#     # #       ##   ## #     #    #    #"
echo "	#     # #       # # # # #     #    #    #"
echo "	######  #####   #  #  # #     #    #    #####"
echo "	#   #   #       #     # #     #    #    #"
echo "	#    #  #       #     # #     #    #    #"
echo "	#     # ####### #     # #######    #    #######"
rem Mode TEST
if "%TOM_JOB_EXEC%" == "TEST" (
	echo Job execute en mode TEST
	%ABM_BIN%\tsend -sT -r0 -m"Traitement termine (mode TEST)"
	%ABM_BIN%\vtgestlog
	goto FIN
)

echo.
:argloop
shift
if "%0"=="" goto argend
set arg=%arg% %0
goto argloop
:argend

"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy RemoteSigned -NonInteractive -Command "$scriptPath='D:\mic\scripts\dispatcher.ps1';$computerName='MAMACHINEDISTANTE';$auth='Negotiate';$command={param($path) & $path}; Invoke-Command -ComputerName $computerName -ScriptBlock $command -ArgumentList $scriptPath -Authentication $auth"

set RETCODE=%ERRORLEVEL%
if %RETCODE% equ 0 goto TERMINE
goto ERREUR

:ERREUR
%ABM_BIN%\tsend -sE -r%RETCODE% -m"Traitement PowerShell en erreur (%RETCODE%)"
%ABM_BIN%\vtgestlog
echo _______________________________________________________________________
echo Fin d'execution du script PowerShell
date /T
echo %time:~+0,8%
echo Exit [%RETCODE%] donc pas d'acquittement
echo _______________________________________________________________________
if not "%TOM_LOG_ACTION%"=="   " call Gestlog_wnt.bat
exit %RETCODE%

:TERMINE
%ABM_BIN%\tsend -sT -r%RETCODE% -m"Traitement PowerShell termine (%RETCODE%)"
%ABM_BIN%\vtgestlog
echo _______________________________________________________________________
echo Fin d'execution du script PowerShell
date /T
echo %time:~+0,8%
echo Exit [%RETCODE%] donc acquittement
if not "%TOM_LOG_ACTION%"=="   " call Gestlog_wnt.bat
exit %RETCODE%

:FIN

explication de la commande :

"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy RemoteSigned -NonInteractive -Command "$scriptPath='D:\mic\scripts\dispatcher.ps1';$computerName='MAMACHINEDISTANTE';$auth='Negotiate';$command={param($path) & $path}; Invoke-Command -ComputerName $computerName -ScriptBlock $command -ArgumentList $scriptPath -Authentication $auth"
  1. %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe : Cette partie indique le chemin d’accès à l’exécutable PowerShell, qui permet d’exécuter des scripts PowerShell.
  2. -ExecutionPolicy RemoteSigned : Cette option définit la stratégie d’exécution pour le processus PowerShell. Ici, la valeur RemoteSigned permet d’exécuter des scripts locaux non signés et des scripts distants signés par un éditeur approuvé.
  3. -NonInteractive : Cette option indique que PowerShell doit être exécuté en mode non interactif, c’est-à-dire sans inviter l’utilisateur à entrer des informations ou à confirmer des actions.
  4. -Command : Cette option indique que la chaîne qui suit doit être interprétée comme une commande PowerShell à exécuter.
  5. $scriptPath='D:\mic\scripts\dispatcher.ps1' : Cette partie définit une variable $scriptPath qui contient le chemin d’accès au fichier de script dispatcher.ps1.
  6. $computerName='MAMACHINEDISTANTE' : Cette partie définit une variable $computerName qui contient le nom de l’ordinateur distant sur lequel exécuter la commande.
  7. $auth='Negotiate' : Cette partie définit une variable $auth qui contient la méthode d’authentification à utiliser pour se connecter à l’ordinateur distant.
  8. $command={param($path) & $path} : Cette partie définit une variable $command qui contient un bloc de script PowerShell qui prend un paramètre $path et exécute le script à ce chemin.
  9. Invoke-Command -ComputerName $computerName -ScriptBlock $command -ArgumentList $scriptPath -Authentication $auth : Cette partie utilise la cmdlet Invoke-Command pour exécuter le bloc de script $command sur l’ordinateur distant $computerName, en passant le chemin du script $scriptPath en argument et en utilisant la méthode d’authentification $auth.

En résumé, cette commande lance un processus PowerShell en mode non interactif avec une politique d’exécution RemoteSigned, puis exécute le script dispatcher.ps1 situé sur un ordinateur distant en utilisant la méthode d’authentification Negotiate.

Étiquettes:

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *