Je suis venu avec le fichier batch ci-dessous, et cela fonctionne très bien. Cependant, j'aimerais savoir s'il existe un moyen de le coder afin que, si un programme est déjà en cours d'exécution, il l'ignore et lance le suivant. J'espère que cela a du sens. Tout avis serait grandement apprécié.
@echo off
pushd
start "" cmd /c cscript "C:\Users\User\Desktop\Work.vbs"
start "C:\Program Files\Microsoft Office\Office15" Outlook.exe
start "C:\Program Files\Microsoft Office\Office15" Lync.exe
start "C:\Program Files (x86)\Google\Chrome\Application" chrome.exe
runas /savecred /user:"DOMAIN\User_Adm" "C:\Program Files (x86)\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe"
runas /savecred /user:"DOMAIN\User_Adm" "mmc.exe \"My_Tools.msc\"
Voici un exemple utilisant tasklist pour vérifier toutes les applications en cours d'exécution pour un nom donné.
Sinon, le programme est lancé. Je suis sûr que vous pouvez l'adapter à vos besoins
tasklist /nh /fi "imagename eq notepad.exe" | find /i "notepad.exe" > nul ||
(start notepad.exe)
J'ai implémenté tasklist dans mon script et cela fonctionne comme un charme.
Le voici pour tous ceux qui ont les mêmes questions que moi.
@echo off
pushd
tasklist /nh /fi "imagename eq iexplore.exe" | find /i "iexplore.exe" > nul ||(start Work.vbs)
tasklist /nh /fi "imagename eq Outlook.exe" | find /i "Outlook.exe" > nul ||(start Outlook.exe)
tasklist /nh /fi "imagename eq lync.exe" | find /i "lync.exe" > nul ||(start lync.exe)
tasklist /nh /fi "imagename eq chrome.exe" | find /i "chrome.exe" > nul ||(start chrome.exe)
tasklist /nh /fi "imagename eq VpxClient.exe" | find /i "VpxClient.exe" > nul || runas /savecred /user:"DOMAIN\User_Adm" "C:\Program Files (x86)\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe"
tasklist /nh /fi "imagename eq mmc.exe" | find /i "mmc.exe" > nul || runas /savecred /user:"DOMAIN\User_Adm" "mmc.exe \"My_Tools.msc\"
@echo off
tasklist /FI "IMAGENAME eq Outlook.exe" | find /i "Outlook.exe"
IF ERRORLEVEL 2 GOTO LOOP2
IF ERRORLEVEL 1 GOTO LOOP1
:LOOP1
start notepad.exe
goto EXIT
:LOOP1
start Outlook.exe
goto EXIT
:EXIT
Voici une version de PowerShell (au lieu de CMD).
(Vous pouvez exécuter Powershell depuis CMD en appelant "powershell.exe
".
Ce script a les effets suivants:
Dans cet exemple, je lance Skype for Business (AKA "lync").
Voici un 1 liner:
if (!((Get-Process | select ProcessName).ProcessName | where {$_ -like "*lync*"})){&(where.exe /R "C:\Program Files (x86)\Microsoft Office" "lync.exe")}
Voici une version commentée:
# If there isn't a running process that contains "lync"...
if (!((Get-Process | select ProcessName).ProcessName | where {$_ -like "*lync*"}))
{
# Find the executable somewhere in program files (x86), and run it.
&(where.exe /R "C:\Program Files (x86)\Microsoft Office" "lync.exe")
}
(vous n'avez pas à rechercher l'exécutable, vous pouvez l'exécuter directement, mais la recherche de l'exécutable autorise les mises à jour MS Office, qui peuvent parfois modifier le répertoire d'installation)