title: Powershell - Close form after time period
body: <p>I have a power-shell form prompting user if they would like to postpone a shutdown time (the time of the shutdown is given by another ps script as an argument which is calculated in the initial script).</p>
  
  <p>I'd like to close the form after 30 minutes of inactivity, how would I go about this?</p>
  
  <p>Powershell Code (Form):</p>
  
  <pre><code>#creating the form object
  
  $form = New-Object System.Windows.Forms.Form 
  
  
  #setting the from title
  $form.Text = "System warning"
  
  #setting the form dimesnions and positions 
  $form.Size = New-Object System.Drawing.Size(300,250) 
  $form.StartPosition = "CenterScreen"
  
  
  #claculate time before shut down:
  $StartDate=(GET-DATE)
  #this ill have to be replaced by a parameter which indicates the shut down date
  $EndDate = $EndDate | Get-Date 
  $timeDifference = NEW-TIMESPAN –Start $StartDate –End $EndDate
  $secondsTilShutdown = $timeDifference.TotalSeconds
  
  
  #time remaining message
  $label = New-Object System.Windows.Forms.Label
  $label.Location = New-Object System.Drawing.Point(10,20) 
  $label.Size = New-Object System.Drawing.Size(280,40)  
  $label.Text = "This computer is scheduled to shutdown at " + $EndDate 
  $form.Controls.Add($label) 
  
  
  #second message 
  $label = New-Object System.Windows.Forms.Label
  $label.Location = New-Object System.Drawing.Point(10,70) 
  $label.Size = New-Object System.Drawing.Size(280,20)  
  $label.Text = "Postpone the shutdown by : " 
  $form.Controls.Add($label) 
  
  
  #setting up the drop down box (time in minutes)
  $TimePeriods = 60, 120, 180, 240  
  
  $DropDown = new-object System.Windows.Forms.ComboBox
  $DropDown.Location = new-object System.Drawing.Size(10,90)
  $DropDown.Size = new-object System.Drawing.Size(130,30)
  
      ForEach ($time in $TimePeriods) {
        [void] $DropDown.Items.Add([string]($time/60) + " hours")
      }
  #1 hour is the default  
  $DropDown.SelectedItem = $DropDown.Items[0]    
  $Form.Controls.Add($DropDown)
  
  
  
  #creating the postpone button  
  $OKButton = New-Object System.Windows.Forms.Button
  #position of the button on the form
  $OKButton.Location = New-Object System.Drawing.Point(25,130)
  #size of the button
  $OKButton.Size = New-Object System.Drawing.Size(100,50)
  #text of the button
  $OKButton.Text = "Postpone"
  #the value that the from dialog will return if we click on ok
  $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
  #assigns a key down on the enter key to the button
  $form.AcceptButton = $OKButton
  #adds the button to the form
  $form.Controls.Add($OKButton)
  
  #creating the ignore button
  $CancelButton = New-Object System.Windows.Forms.Button
  $CancelButton.Location = New-Object System.Drawing.Point(175,130)
  $CancelButton.Size = New-Object System.Drawing.Size(100,50)
  $CancelButton.Text = "Continue with scheduled shutdown"
  $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
  $form.CancelButton = $CancelButton
  $form.Controls.Add($CancelButton)
  
  
  $textBox = New-Object System.Windows.Forms.TextBox 
  $textBox.Location = New-Object System.Drawing.Point(10,40) 
  $textBox.Size = New-Object System.Drawing.Size(260,20) 
  $form.Controls.Add($textBox) 
  
  $form.Topmost = $True
  
  $form.Add_Shown({$textBox.Select()})
  $result = $form.ShowDialog()
  
  
  ###processing form results : 
  
  
  #if the postpone button button was selected 
  if ($result -eq [System.Windows.Forms.DialogResult]::OK)
  {
      #logic
  }
  
  elseif($result -eq [System.Windows.Forms.DialogResult]::Cancel)
  {
     #we do not push back the shut down time 
  }
  </code></pre>