【问题标题】:Loop Powershell script to re-prompt user ever hour or until timeout limit is reached循环 Powershell 脚本以每小时重新提示用户或直到达到超时限制
【发布时间】: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


【解决方案1】:

再次感谢大家!在直到之前添加这个 if 语句给了我想要的结果。

$TimeNow = 获取日期 if ($TimeNow -ge $TimeEnd) { shutdown -r -f -t 600 -c "您已达到指定的重启延迟时间。请保存您的工作并重启,否则您的计算机将在 10 分钟后自动重启。" }

感谢这篇帖子 https://www.itninja.com/blog/view/reboot-required-toast-notifications-for-windows-machines 提供原始脚本。我刚刚修改了我想要的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多