When applying a policy to a machine, agent procedures contained in the policy do not run immediately.
This is by design. Any procedure scheduled via policy management, cannot be scheduled to run immediately, you can only schedule procedures to run immediately directly within the modules themselves.
For example, lets say you have a procedure in a policy called 'Hello World' set to run once in the past. By default, policy management will try to schedule it 24 hours in the future. This is to prevent performance issues. This is a way to prevent users from potentially scheduling a procedure on hundreds of machines at once and having them all execute simultaneously.
With the Policy Management module and Agent Procedures, the following example logic is applied when deploying procedures through a policy:
if you schedule the procedure through the Policy Management module and check the skipIfOffline option, the procedure will be scheduled with no change ( skipIfOffline ensures that the procedure won't run immediately if the start date was in the past). If skipifOffline is not checked and the startDate is in the future, there will be no change to the deployment schedule. If skipIfOffline is not checked and the startDate is in the past, then the startDate will be pushed up by one day from today, again to ensure that the procedure doesn't run immediately.
However, if you go directly to the Agent Procedure module, you can schedule the same procedure to run immediately.
You can't get the procedure to run immediately but if you set the schedule to run in a few hours from the moment you apply it, it will run then.