0

Exchangeデータベースのスケジュールが実行されているかどうか、または数時間以内に実行されるかどうかを確認したいと思います。ただし、scheduleintervalオブジェクトをget-dateまたは(get-date).addhours(20)で作成した変数と比較する方法がわかりませんでした。

私が見ているscheduleIntervalは

C:\>(get-mailboxdatabase | where {$_.name -like 'database'}).maintenanceschedule  | Get-Member

   TypeName: Microsoft.Exchange.Common.ScheduleInterval

Name         MemberType Definition
----         ---------- ----------
CompareTo    Method     int CompareTo(System.Object value), int CompareTo(Microsoft.Exchange.Common.ScheduleInterval...
ConjointWith Method     bool ConjointWith(Microsoft.Exchange.Common.ScheduleInterval other)
Contains     Method     bool Contains(Microsoft.Exchange.Common.WeekDayAndTime dt), bool Contains(System.DateTime dt...
Equals       Method     bool Equals(System.Object obj)
GetHashCode  Method     int GetHashCode()
GetType      Method     type GetType()
Overlaps     Method     bool Overlaps(Microsoft.Exchange.Common.ScheduleInterval other)
ToString     Method     string ToString()
EndDay       Property   System.DayOfWeek EndDay {get;}
EndHour      Property   System.Int32 EndHour {get;}
EndMinute    Property   System.Int32 EndMinute {get;}
EndTime      Property   Microsoft.Exchange.Common.WeekDayAndTime EndTime {get;}
Length       Property   System.TimeSpan Length {get;}
StartDay     Property   System.DayOfWeek StartDay {get;}
StartHour    Property   System.Int32 StartHour {get;}
StartMinute  Property   System.Int32 StartMinute {get;}
StartTime    Property   Microsoft.Exchange.Common.WeekDayAndTime StartTime {get;}

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

1

ここでは、ジョブがそのGet-Date値で実行されているかどうかをテストする方法を示します。たぶん、比較はキャストstarttime/endtime propertiesして行うことができます[datetime]が、テストすることはできません。

$a = (get-mailboxdatabase | where {$_.name -like 'database'}).maintenanceschedule
$b = Get-date # you can add days to check events in the future
if ( $a.startday, $a.endday -contains $b.dayofweek)
{
  if ( $a.starthour -le $b.hour -and $a.endhour -ge $b.hour)
  {
    if (  $a.startminute -le $b.minute -and $a.endminute -ge $b.minute)
    {
       Write-Host "Jod scheduled is running at this time!"
    }
  }
}
于 2012-09-21T05:23:16.207 に答える
0

Microsoft.Exchange.Common.ScheduleIntervalを日時オブジェクトの配列に変換するために、次のコードを記述しました。誰かが私のコードを改善できることを願っています...

$schedules=(get-mailboxdatabase|where {$_.name -like "dbname"}).maintenanceschedule 

$curdatetime = get-date
$dowhash = @{"Monday"=1;"Tuesday"=2;"Wednesday"=3;"Thursday"=4; `
             "Friday"=5;"Saturday"=6;"Sunday"=7}
$todaydow = $dowhash.get_item([string]$curdatetime.dayofweek)
$coming = @()

foreach ($schedule in $schedules) {
  $dow = $dowhash.get_item([string]$schedule.startday)
  $start = $curdatetime.adddays((($dow+7-$todaydow) % 7))
  $startstr = "{0:yyyyMMdd}{1:00}{2:00}" `
              -f $start,$schedule.starthour,$schedule.startminute

  $dow = $dowhash.get_item([string]$schedule.endday)
  $end = $curdatetime.adddays((($dow+7-$todaydow) % 7))
  $endstr   = "{0:yyyyMMdd}{1:00}{2:00}" `
              -f $end,$schedule.endhour,$schedule.endminute

  $coming+=,([datetime]::ParseExact($startstr,"yyyyMMddHHmm",$null), `
             [datetime]::ParseExact($endstr,"yyyyMMddHHmm",$null) )
}

ありがとう

于 2012-09-21T09:30:30.367 に答える