

1 )Īll of the script is now contained within a single location. #$results = Receive-Job -Job $Job -Keep #Animate the Button if ( $buttonStartJob. The button creates a job, starts the timer and uses the tag property of the timer to track it. The timer checks the status of a job that is created when the button is pressed. If you look at the control set it inserts a button and a timer. Version 3.0.3 of PowerShell Studio has a Control Set called “Button – Start Job”. Now that we covered the caveats, we can now begin to modify our forms so that it can handle jobs. Therefore, you will need to use a Timer control to check the job’s status periodically. :: DoEvents()Įven with this work around you cannot access the form controls directly. WindowState = 'Minimized' #Will not work #Handle the events so the message will display If you try to register an event handler for the job’s StateChanged event using Register-ObjectEvent, you find that it will not seem to trigger while the form is displayed, unless you call the ::DoEvents() method mentioned in the Creating Responsive Loops article.įor example: Register-ObjectEvent -InputObject $Job -EventName StateChanged ` To determine if a job is complete you will need to check the status of the job. The form controls do not allow themselves to be accessed from a different thread (i.e., the job).Ģ. If you need to update a form control or show progress, use the Receive-Job cmdlet to gather any necessary information from the job first and then update the control from the main script. Never access or modify form controls directly from within a job. There are two caveats you need to keep in mind when using jobs within a Form.ġ. Suppresses the command prompt until one or all jobs are complete. Gets the background jobs that were started in the current session.


Starts a background job on a local computer. Please refer to the MSDN PowerShell Jobs help page for more information. For your convenience we will list the cmdlets that are directly related to jobs. This article will not cover the ins and outs of jobs and it expects the user has some basic knowledge of the jobs mechanism in PowerShell. In this case it will free up the GUI and allow it to respond to user input. If you truly want to make your forms responsive, you will need to move these slow scripts into another thread and in the PowerShell world this means using jobs.įor those of you who aren’t familiar with PowerShell Jobs, they allow you to run scripts while freeing up the console to perform other tasks. Previously I discussed how to make your loops more responsive in this article, but not every long script comes in the form of a loop. When working with GUIs you may have noticed that the Form can freeze when running long scripts.
