Почему мой Runbook Powershell не понимает время должным образом? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть экземпляры Azure с двумя тегами, PHExempt, который имеет значение ИСТИНА или ЛОЖЬ, и тег с именем OpeningHours, который содержит строку типа 0900-> 1730-M-> F, когда он должен быть включен и работать.

Следующая функция выключает машины, когда пришло время их выключать, но не включает их, когда они должны быть включены ТОЛЬКО, когда они запускаются из модуля запуска Azure powershell.Работает нормально с ноутбука (обычное "работает на моей машине", а).Почему?

  foreach ($box in ($environment | Sort-Object -Property Name)) {
# I don't know why but for some reason $box.Name in a string doesn't swap in, we need to set a display name in the loop
$displayName = $box.Name

$boxOpening = Get-Date -Hour ($box.Tags.OpeningHours.Split("->")[0]).substring(0,2) -Minute ($box.Tags.OpeningHours.Split("->")[0]).substring(2,2)
$boxClosing = (Get-Date -Hour ($box.Tags.OpeningHours.Split("->")[2]).substring(0,2) -Minute ($box.Tags.OpeningHours.Split("->")[2]).substring(2,2))

if ($boxClosing.Hour -lt 12) { #do we close in the morning?
  $boxClosing = $boxClosing.AddDays(1) #tomorrow not today
}

if (($currenttime -gt $boxOpening) -and ($currenttime -lt $boxClosing)) {
  $shouldBeOn = "TRUE"
} else {
  $shouldBeOn = "FALSE"

}


$Name = $box.Name
Write-Host "$Name opens at $boxOpening and closes at $boxClosing, should be on is $shouldBeOn"

if ($shouldBeOn -eq "FALSE") {
  if ($box.Tags.PHExempt -eq "FALSE") {
    if ((Get-AzureRmVM -ResourceGroupName $box.ResourceGroupName -Name $Name -Status | Select-Object -ExpandProperty Statuses `
           | Where-Object { $_.Code -match "PowerState" } | `
           Select-Object -ExpandProperty DisplayStatus) -eq "VM running") {
      Stop-AzureRmVM -Name $box.Name -ResourceGroupName $box.ResourceGroupName -Force
    }
  }
} elseif ($shouldBeOn -eq "TRUE") {
  if ((Get-AzureRmVM -ResourceGroupName $box.ResourceGroupName -Name $Name -Status | Select-Object -ExpandProperty Statuses `
         | Where-Object { $_.Code -match "PowerState" } | `
         Select-Object -ExpandProperty DisplayStatus) -eq "VM deallocated") {

    Start-AzureRmVM -Name $box.Name -ResourceGroupName $box.ResourceGroupName
  }
}

}

1 Ответ

0 голосов
/ 18 сентября 2018

Часовые пояса отстой.

Проблема действительно в GMT (Shadowzee, если вы добавите ответ вместо своего комментария, я проголосую за правильный ответ).В основном, вычисление времени включения и времени выключения с использованием get-date и перезаписи часов с указанным временем в теге не работает, если GMT в настоящее время вчера по сравнению с AEST.Журналы показали - при ближайшем рассмотрении отсутствие включенных машин, потому что текущее время не находится между временем открытия и закрытия ВЧЕРА.

...