時刻同期
Windowsを使っていて、パフォーマンスやセキュリティを気にする時、起動サービスはできるだけ少ないほうが良いと思います。時刻同期を行うサービスはその一つです。W32timeは時刻の同期を維持する機能があります。しかし、時刻のずれをそんなに意識しない場合は停止していても良いサービスだと思われます。同期を取りたい場合のみサービスを起動してすれば十分です。そこで、時刻同期のシェルを作成しました。W32timeを起動して時刻同期の処理を行います。これを日時のタスクに登録しておけば、時刻の同期が1日ずつ行われ、W32timeは常時起動状態にせずに済みます。
set-PSDebug -strict #------------------------------ # 時刻同期 #------------------------------ Function SetTime{ # エラー メッセージを表示せずに処理を続ける $ErrorActionPreference = "SilentlyContinue" # サービス名 $service_name = "W32Time" # サービスが停止中の場合、起動する $status = ( get-service $service_name ).status if ($status -eq "Stopped"){ start-Service $service_name } # 時刻同期(最大2回リトライ) $result = [boolean] for($n=1; $n -le 3; $n++){ w32tm /resync | out-null $result = $? if ($result){ break } start-Sleep -second 3 } # サービスが起動中の場合、停止する $status = ( get-service $service_name ).status if ($status -eq "Running"){ stop-Service $service_name } # 時刻同期失敗の場合 if (!$result){ throw } # エラー捕捉 trap { $msg = "時刻同期に失敗しました。" write-Host $msg $EventLog = new-Object system.Diagnostics.EventLog $EventLog.log = "Application" $Eventlog.source = "SetTime.ps1" $Eventlog.WriteEntry($msg, "Error", 111) } }