У меня есть экземпляры 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
}
}
}