This paper presents a greedy randomized adaptive search procedure (GRASP) for scheduling n jobs on m nonhomogeneous parallel machines with time windows. An additional feature of the problem is that each job falls into one of ρ priority classes. The objective is to maximize the number of jobs scheduled, where a job in a higher priority class has infinitely more value than a job in a lower priority class. The GRASP consists of two phases. The first phase produces feasible solutions by ranking each job with a greedy function and then selecting one at random from a restricted candidate list. The process is repeated until no more jobs can be scheduled. The second phase seeks a local optimum by searching over a series of neighborhoods defined by job insertions and exchanges. The algorithm is compared to a dynamic-programming heuristic that sequentially schedules the jobs in each priority class. Extensive computational results are presented based on data drawn from an application involving the use of communications relay satellites.