2016-11-13 61 views
1

如果用户想要推迟关闭时间,则会提示用户使用Power-Shell窗体(关闭时间由另一个ps脚本作为参数在初始脚本中计算得出)。PowerShell - 时间段后的关闭表格

我想在闲置30分钟后关闭表格,我该怎么办?

PowerShell代码(表格):

#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 
} 
+0

可以启动一个定时器,该关闭的形式,当它冷杉。 – JPBlanc

回答

1

使用定时器,我给你一个例子,定时器至极接近形式

Function ClearAndClose() 
{ 
    $Timer.Stop(); 
    $Form.Close(); 
    $Form.Dispose(); 
    $Timer.Dispose(); 
    $Label.Dispose(); 
    $Button.Dispose(); 
    $Script:CountDown=5 
} 

Function Button_Click() 
{ 
    ClearAndClose 
} 

Function Timer_Tick() 
{ 

    $Label.Text = "Your system will reboot in $Script:CountDown seconds" 
     --$Script:CountDown 
     if ($Script:CountDown -lt 0) 
     { 
      ClearAndClose 
     } 
} 



Add-Type -AssemblyName System.Windows.Forms 
Add-Type -AssemblyName System.Drawing 
$Form = New-Object system.Windows.Forms.Form 
$Form.Text = "Attention redémarrage!!" 
$Form.Size = New-Object System.Drawing.Size(250,100) 
$Form.StartPosition = "CenterScreen" 
$Form.Topmost = $True 


$Label = New-Object System.Windows.Forms.Label 
$Label.AutoSize = $true 
$Label.Location = New-Object System.Drawing.Size(20,5) 


$Button = New-Object System.Windows.Forms.Button 
$Button.Location = New-Object System.Drawing.Size(55,35) 
$Button.Size = New-Object System.Drawing.Size(120,23) 
$Button.Text = "STOP" 
$Button.DialogResult=[System.Windows.Forms.DialogResult]::OK 

$Timer = New-Object System.Windows.Forms.Timer 
$Timer.Interval = 1000 

$Form.Controls.Add($Label) 
$Form.Controls.Add($Button) 

$Script:CountDown = 6 

$Button.Add_Click({Button_Click}) 
$Timer.Add_Tick({ Timer_Tick}) 


$Timer.Start() 
$Form.ShowDialog()