Запрос относительно настроенного сценария перезагрузки PowerShell

Все,

У меня есть сценарий PS (если быть точным, я не программист). Этот сценарий предназначен для перезагрузки системы с такими параметрами: «перезапустить сейчас», «перезагрузить через 4 часа» и «перезагрузить через 8 часов». Проблема в том, что я не могу понять, как включить опцию «свернуть» в строку заголовка, я не хочу, чтобы конечный пользователь выходил из нее, поэтому кто-то специально разработал поле, увы, которое удалило все из заголовка (без минимизации , нет выхода). Могу я попросить кого-нибудь помочь с этим? Заранее спасибо.

Сценарий:

Function Create-GetSchedTime {
Param(
$SchedTime
)
$script:StartTime = (Get-Date).AddSeconds($TotalTime)
$RestartDate = ((get-date).AddSeconds($TotalTime)).AddMinutes(-1)
$RDate = (Get-Date $RestartDate -f 'dd.MM.yyyy') -replace ".","/"
$RTime = Get-Date $RestartDate -f 'HH:mm'
&schtasks /delete /tn "Post Maintenance Restart" /f
&schtasks /create /sc once /tn "Post Maintenance Restart" /tr "'C:Windowssystem32cmd.exe' /c shutdown /r /t 400" /SD $RDate /ST $RTime /f
}
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName( "Microsoft.VisualBasic") | Out-Null
$Title = "Message IT service desk - Action required "
$Message = "Your computer has not been restarted since it was last patched. Please save all your work and make the appropriate selections below"
$Button1Text = "Restart now"
$Button2Text = "Postpone for 4 hours"
$Button3Text = "Postpone for 8 hours"
$Form = $null
$Button1 = $null
$Button2 = $null
$Label = $null
$TextBox = $null
$Result = $null
$timerUpdate = New-Object 'System.Windows.Forms.Timer'
$TotalTime = 300 #in seconds
Create-GetSchedTime -SchedTime $TotalTime
$timerUpdate_Tick={
# Define countdown timer
[TimeSpan]$span = $script:StartTime - (Get-Date)
# Update the display
$hours = "{0:00}" -f $span.Hours
$mins = "{0:00}" -f $span.Minutes
$secs = "{0:00}" -f $span.Seconds
$labelTime.Text = "{0}:{1}:{2}" -f $hours, $mins, $secs
$timerUpdate.Start()
if ($span.TotalSeconds -le 0)
{
$timerUpdate.Stop()
&schtasks /delete /tn "Post Maintenance Restart" /f
shutdown /r /t 0
}
}
$Form_StoreValues_Closing=
{
#Store the control values
}

$Form_Cleanup_FormClosed=
{
#Remove all event handlers from the controls
try
{
$Form.remove_Load($Form_Load)
$timerUpdate.remove_Tick($timerUpdate_Tick)
#$Form.remove_Load($Form_StateCorrection_Load)
$Form.remove_Closing($Form_StoreValues_Closing)
$Form.remove_FormClosed($Form_Cleanup_FormClosed)
}
catch [Exception]
{ }
}

# Form
$Form = New-Object -TypeName System.Windows.Forms.Form
$Form.Text = $Title
$Form.Size = New-Object -TypeName System.Drawing.Size(450,210)
$Form.StartPosition = "CenterScreen"
$Form.ControlBox = $False
$Form.Topmost = $true
$Form.KeyPreview = $true
$Form.ShowInTaskbar = $Formalse
$Form.FormBorderStyle = "FixedDialog"
$Form.MaximizeBox = $Formalse
$Form.MinimizeBox = $Formalse
$Icon = [system.drawing.icon]::ExtractAssociatedIcon("c:WindowsSystem32UserAccountControlSettings.exe")
$Form.Icon = $Icon

# Button One (Reboot/Shutdown Now)
$Button1 = New-Object -TypeName System.Windows.Forms.Button
$Button1.Size = New-Object -TypeName System.Drawing.Size(95,25)
$Button1.Location = New-Object -TypeName System.Drawing.Size(10,135)
$Button1.Text = $Button1Text
$Button1.Font="Tahoma, 10pt"
$Button1.Add_Click({
&schtasks /delete /tn "Post Maintenance Restart" /f
shutdown /r /t 0
$Form.Close()
})
$Form.Controls.Add($Button1)
# Button Two (Postpone for 4 Hours)
$Button2 = New-Object -TypeName System.Windows.Forms.Button
$Button2.Size = New-Object -TypeName System.Drawing.Size(138,25)
$Button2.Location = New-Object -TypeName System.Drawing.Size(105,135)
$Button2.Text = $Button2Text
$Button2.Font="Tahoma, 10pt"
$Button2.Add_Click({
$Button2.Enabled = $False
$timerUpdate.Stop()
$TotalTime = 14400
Create-GetSchedTime -SchedTime $TotalTime
$timerUpdate.add_Tick($timerUpdate_Tick)
$timerUpdate.Start()
})
$Form.Controls.Add($Button2)
# Button Three (Postpone for 8 Hours)
$Button3 = New-Object -TypeName System.Windows.Forms.Button
$Button3.Size = New-Object -TypeName System.Drawing.Size(145,25)
$Button3.Location = New-Object -TypeName System.Drawing.Size(243,135)
$Button3.Text = $Button3Text
$Button3.Font="Tahoma, 10pt"
$Button3.Add_Click({
$Button3.Enabled = $False
$timerUpdate.Stop()
$TotalTime = 28800
Create-GetSchedTime -SchedTime $TotalTime
$timerUpdate.add_Tick($timerUpdate_Tick)
$timerUpdate.Start()
})
$Form.Controls.Add($Button3)

# Label
$Label = New-Object -TypeName System.Windows.Forms.Label
$Label.Size = New-Object -TypeName System.Drawing.Size(445,35)
$Label.Location = New-Object -TypeName System.Drawing.Size(10,15)
$Label.Text = $Message
$label.Font="Tahoma, 10pt"
$Form.Controls.Add($Label)

# Label2
$Label2 = New-Object -TypeName System.Windows.Forms.Label
$Label2.Size = New-Object -TypeName System.Drawing.Size(355,30)
$Label2.Location = New-Object -TypeName System.Drawing.Size(10,100)
$Label2.Text = $Message2
$label2.Font="Tahoma, 10pt"
$Form.Controls.Add($Label2)

# labelTime
$labelTime = New-Object 'System.Windows.Forms.Label'
$labelTime.AutoSize = $True
$labelTime.Font="Arial, 26pt, style=Bold"
$labelTime.Location = '120, 60'
$labelTime.Name="labelTime"
$labelTime.Size="43, 15"
$labelTime.TextAlign = 'MiddleCenter'
$labelTime.ForeColor="242, 103, 34"
$Form.Controls.Add($labelTime)

#Start the timer
$timerUpdate.add_Tick($timerUpdate_Tick)
$timerUpdate.Start()
# Show
$Form.Add_Shown({$Form.Activate()})
#Clean up the control events
$Form.add_FormClosed($Form_Cleanup_FormClosed)
#Store the control values when form is closing
$Form.add_Closing($Form_StoreValues_Closing)
#Show the Form
$Form.ShowDialog() | Out-Null

1 ответ
1

Смотрите версию этого скрипта, размещенную здесь:

Пользовательский сценарий перезапуска

Он основан на том же исходном коде и имеет отключенную кнопку закрытия и работающую кнопку свертывания. Если вы сравните свою версию скрипта с версией по этой ссылке, это покажет вам, какие ключевые элементы необходимо изменить, чтобы отключить кнопку закрытия и включить кнопку свертывания.

Вот изменения, которые вам нужно внести …

Старый код:

$Form.ControlBox = $False
$Form.MinimizeBox = $Formalse
...
$Form.add_Closing($Form_StoreValues_Closing)

Новый код:

$Form.ControlBox = $True
$Form.MinimizeBox = $True
...
$Form.Add_Closing({$_.cancel = $True})

Также обратите внимание, что все вхождения «$ Formalse» следует заменить на «$ False». Это опечатка, перенесенная из оригинального сценария. Он отлично работает с «$ Formalse» (как и с любой неопределенной переменной), но просто лучше читается с «$ False».

  • LesFerch — Спасибо, да, это правильно, это было заимствовано. Однако вопрос в том, как получить только эту опцию минимизации без опции X в заголовке? PS — я не программист 🙁

    — Сентил Кумар Аравиндакшан
    14 часов назад

  • Параметр X в этом настраиваемом сценарии отключен. Итак, да, X есть, но он ничего не делает.

    — LesFerch
    14 часов назад

  • LesFerch — спасибо, но как мне включить минимизацию без X?

    — Сентил Кумар Аравиндакшан
    13 часов назад

  • Нет простого способа получить кнопку сворачивания без кнопки X. Сценарий, на который я вам указал, обеспечивает правильную функциональность. Пользователь может свернуть, но не может выйти. Если это неприемлемо с эстетической точки зрения, вам нужно написать более сложный код. По следующей ссылке есть подсказки, но я не умею заставить его работать в сценарии PowerShell: social.msdn.microsoft.com/Forums/vstudio/en-US/…

    — LesFerch
    13 часов назад

  • Другой вариант, который потенциально проще создать в сценарии (но он также может не соответствовать вашим эстетическим требованиям), — это отключить все системные меню (т. Е. Без сворачивания, разворачивания или выхода), а затем предоставить собственную кнопку «Свернуть» в диалоговом окне. .

    — LesFerch
    13 часов назад

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *