Search code examples
powershellcommand-lineautomation

PowerShell: Detecting that a specifically opened program is running (and closing it)


I'm trying to automate a workflow. The automation script is mainly written in PowerShell It consists of these steps: 1) Opening a program 2) Communicating with the API, reading values, etc. 3) Closing the program. This script will be run many times a day, it would suffice to not close the program every time the script is finishing, but rather check at the beginning of the script whether the program is already opened, and if not, open it. I'd like to implement both, then decide which solution to use later on.

The code for opening the program is completed, but it's not enough to just run an .exe file to open the program, as I have to load the correct settings and GUI, for this while opening the .exe file from the command line, additionally, I have to use -s, also -c. I concluded all this in runProgram.cmd, so in the PowerShell script, I only run this file to open the program. However, I am unsure how the already opened program can be detected (that it's opened), and how can I close it. I believe a solution might use processes, with the help of Get-Process, but I'm unsure of its capabilities and limitations (how do I check if my program's process is not amongst the list of running processes?), and whether there is a better way of dealing with this problem.


Solution

  • I have found the solution:

    1. Open the program and open PowerShell, then in PowerShell type Get-Process (this will list all the currently running processes)

    2. Search for your process (by name). Often it may not be known which process is the one you're looking for, you can close your program, then type Get-Process again, and look for the process that disappeared from the list, since you closed it. Let's assume the name of it is "yourprocess".

    3. In the PS code, type $val = Get-Process -Name yourprocess. If it is running, $val should equal some data about the process, if it is not running, then $val is 0. Therefore, if you want to check whether it's opened, you should use:

    if($null -ne $val){...}

    Finally, stopping the process: Stop-Process -Name yourprocess.