1

メッセージボックスを使用して特定のイベントを表示する目覚まし時計を作成したいと考えています。

提供されたコードの使用:

 [System.Windows.Forms.MessageBox]::Show("Do this task" , "Alert!")  


Do 
{ 
$waitMinutes = 1 
$startTime = get-date 
$endTime   = $startTime.addMinutes($waitMinutes) 
$timeSpan = new-timespan $startTime $endTime 
Start-Sleep $timeSpan.TotalSeconds 

# Play System Sound 
[system.media.systemsounds]::Exclamation.play() 
# Display Message 
Show-MessageBox Reminder "Do this task." 
} 

# Loop until 11pm 
Until ($startTime.hour -eq 23)
4

3 に答える 3

2

これを行うには、ループではなくイベントを使用する方がはるかに優れていると思います。

[datetime]$alarmTime = "November 7, 2013 10:30:00 PM" 
$nowTime = get-date 
$tsSeconds = ($alarmTime - $nowTime).Seconds
$timeSpan = New-TimeSpan -Seconds $tsSeconds

$timer = New-Object System.Timers.Timer
Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action { [System.Windows.Forms.MessageBox]::Show("Brush your Teeth" , "Alert!") }
$timer.Autoreset = $false 
$timer.Interval = $timeSpan.TotalMilliseconds
$timer.Enabled = $true

完全な解決策を書く気はありません。それは仕事になるからです。私は仕事をしていませんが、ここにあるすべての回答から、必要なものはすべて揃っていると思います。

上記のガイダンスについては、このページを参照しました。

http://blogs.technet.com/b/heyscriptingguy/archive/2011/06/16/use-asynchronous-event-handling-in-powershell.aspx

于 2013-11-08T04:52:17.187 に答える
0

V3 を使用している場合は、これをお勧めします (昇格/管理者プロンプトから):

$principal = New-ScheduledTaskPrincipal -LogonType Interactive
Register-ScheduledJob -Name BrushTeeth -Trigger @{Frequency='Daily';At="7:30am"} -ScriptBlock {
    Add-Type -assembly System.Windows.Forms 
    [Windows.Forms.MessageBox]::Show('Brush your teeth!')}
Set-ScheduledTask -TaskName "\Microsoft\Windows\PowerShell\ScheduledJobs\BrushTeeth" -Principal $principal

皆さん、PowerShell V4 がリリースされました。少なくとも V3 に移行する時が来ました。:-)

注: [ユーザーがログオンしているときにのみ実行する] 設定を有効にするには、$principal ビジネスが必要です。これにより、UI がデスクトップと対話できるようになります。これがないと、メッセージボックスが表示されるようになりました。

于 2013-11-08T03:23:52.520 に答える