2016-11-13 36 views
1

シャットダウン時間を延期したい場合は、ユーザーにプロンプ​​トを表示するパワーシェル形式を使用します(シャットダウンの時間は、別の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() 
関連する問題