【发布时间】:2021-06-18 15:24:03
【问题描述】:
新手
我想使用类似于以下示例的 Powershell 脚本向最终用户提示需要重新启动的 toast 消息,然后显示消息框以立即重新启动或选择否以延迟。如果选择否,我希望脚本等待一个小时并每隔一小时再次提示用户,直到达到超时期限。例如,在本地机器时间上午 7:00 开始提示,然后每隔一小时提示一次,选择是现在重新启动,选择是或推迟到 1:oopm 本地机器时间。然后用户机器将在 10 分钟内重新启动。节省工作。
我将使用 SCCM 进行部署。这将每周运行一次。
脚本示例
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") | out-null
$TimeStart = Get-Date
$TimeEnd = $timeStart.addminutes(360)
Do
{
$TimeNow = Get-Date
if ($TimeNow -ge $TimeEnd)
{
Unregister-Event -SourceIdentifier click_event -ErrorAction SilentlyContinue
Remove-Event click_event -ErrorAction SilentlyContinue
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
Exit
}
else
{
$Balloon = new-object System.Windows.Forms.NotifyIcon
$Balloon.Icon = [System.Drawing.SystemIcons]::Information
$Balloon.BalloonTipText = "IT is requiring a reboot in order to maintain system stability supporting IT security measures. Please reboot at your earliest convenience."
$Balloon.BalloonTipTitle = "Reboot Required"
$Balloon.BalloonTipIcon = "Warning"
$Balloon.Visible = $true;
$Balloon.ShowBalloonTip(20000);
$Balloon_MouseOver = [System.Windows.Forms.MouseEventHandler]{ $Balloon.ShowBalloonTip(20000) }
$Balloon.add_MouseClick($Balloon_MouseOver)
Unregister-Event -SourceIdentifier click_event -ErrorAction SilentlyContinue
Register-ObjectEvent $Balloon BalloonTipClicked -sourceIdentifier click_event -Action {
Add-Type -AssemblyName Microsoft.VisualBasic
If ([Microsoft.VisualBasic.Interaction]::MsgBox('Would you like to reboot your machine now?', 'YesNo,MsgBoxSetForeground,Question', 'System Maintenance') -eq "NO")
{ }
else
{
shutdown -r -f
}
} | Out-Null
Wait-Event -timeout 3600 -sourceIdentifier click_event > $null
Unregister-Event -SourceIdentifier click_event -ErrorAction SilentlyContinue
$Balloon.Dispose()
}
}
Until ($TimeNow -ge $TimeEnd)
【问题讨论】:
-
您很清楚自己想要实现的目标。我会说继续做吧。如果您在此过程中遇到问题,StackOverflow 将是您可以提问的地方。如果您展示您的尝试以及它是如何不起作用的,这里的人们很乐意提供帮助。
-
不过,在您将时间浪费在编码上之前,我会进行一些认真的搜索,从简短的谷歌搜索来看,似乎有几种方法可以做到这一点,并且有可用的代码。
-
您为什么不直接使用 SCCM 来强制执行有期限的部署?如果需要重新启动,它将每隔一段时间提示用户,直到达到最后期限。
-
感谢您的建议。是的,有几种方法可以做到这一点,但还没有找到一种符合我公司期望结果的方法。该脚本非常适合允许用户推迟,但在 Do 循环结束时,它会关闭并且不会在 $TimeEnd 强制重新启动。所以我们想在 07:00 开始提示,让他们推迟到 13:00,提示你没时间了,然后用 cpl min 强制关机。节省工作。我可以使用 SCCM 部署脚本,每周运行一次。
标签: powershell sccm reboot