Skip to main content

Mise-en-Place

Multi-Cloud VM Scheduler

"Cooking up cost savings, one VM at a time!" - Scripts that stop and start Virtual Machines across all major cloud providers. Read a CSV of VMs + times and flip power states like a grill master.

Blaze
Blaze says:VM scheduling is the single fastest FinOps win you can get. Shutting down dev/test VMs outside business hours (nights + weekends) saves ~65% on compute costs with zero performance impact during work hours.

Scheduler quick start

Structured quick-reference sections for prerequisites, installation, usage, and troubleshooting.

Prerequisites by provider

ProviderScriptRuntimePrerequisites
AzureAzure-Start-CloudGrill.ps1powershellPowerShell 5.1 or later, Azure PowerShell module
AWSAWS-Start-CloudGrill.ps1powershellPowerShell 5.1 or later, AWS CLI configured
GCPGCP-Start-CloudGrill.ps1powershellPowerShell 5.1 or later, Google Cloud CLI
Oracle Cloudoci-start-cloudgrill.pypythonPython 3.6 or later, OCI Python SDK

Each provider script uses a provider-native authentication path (Az, AWS CLI, gcloud, or OCI SDK/config).

Standard rollout workflow

  1. 1Start with one cloud provider and a small CSV schedule to validate authentication and time-window behavior.
  2. 2Test both in-window and out-of-window executions so you confirm start/stop logic before broad rollout.
  3. 3Standardize CSV files per provider and store them in source control or a secured automation repo.
  4. 4Move to scheduled execution (Task Scheduler, cron, pipeline runner) after validating logs and behavior.
powershell
# Azure (PowerShell)
.\Azure-Start-CloudGrill.ps1 -CsvFilePath"vms.csv"
powershell
# AWS (PowerShell)
.\AWS-Start-CloudGrill.ps1 -CsvFilePath"vms.csv"
powershell
# Google Cloud (PowerShell)
.\GCP-Start-CloudGrill.ps1 -CsvFilePath"vms.csv"
python
# Oracle Cloud (Python)
python oci-start-cloudgrill.py vms.csv

CSV schedule formats

ProviderCSV headerUse case
AzureVMName,ResourceGroupName,SubscriptionId,StartTime,StopTimeDefine VM/instance identifiers with start/stop windows
Google CloudVMName,Zone,ProjectId,StartTime,StopTimeDefine VM/instance identifiers with start/stop windows
AWSInstanceId,Region,InstanceName,StartTime,StopTimeDefine VM/instance identifiers with start/stop windows
Oracle CloudInstanceId,CompartmentId,InstanceName,StartTime,StopTimeDefine VM/instance identifiers with start/stop windows

Schedule logic outcomes

ScenarioExpected action
Current time between start and stopStart the VM
Current time outside the windowStop the VM
Blank start/stop fieldsNo schedule action (allowed for flexible configs)
  • Use 24-hour time values in the CSV (for example: 08:00, 18:30).

Automation and operations guidance

  • Run in read-only/validation mode first if you create a wrapper script for dry-run testing.
  • Schedule outside critical maintenance windows while you validate logs and startup dependencies.
  • Keep separate CSVs for dev, test, and shared services to reduce blast radius.
  • Track failures and skipped actions in logs so teams can fix auth/permission issues quickly.

Timezone and schedule assumptions

Validate server timezone and business-hour assumptions before production use. A correct CSV with the wrong timezone still causes incorrect starts/stops.

Troubleshooting

  • If a provider script fails, verify provider CLI/SDK authentication independently before rerunning the scheduler.
  • If no actions occur, inspect CSV header format and time values (24-hour format expected).
  • If VMs start/stop at unexpected times, confirm the execution host timezone and schedule file assumptions.

Overview

Welcome to CloudCostChefs - your sous chef for managing virtual machine schedules across all major cloud providers. Our collection of scripts helps you start and stop VMs based on CSV schedules, turning your cloud infrastructure into a well-orchestrated kitchen that runs only when needed.

This repository contains four expertly crafted scripts that manage VM/compute instance schedules across:

  • Microsoft Azure - Azure-Start-CloudGrill.ps1
  • Google Cloud Platform - GCP-Start-CloudGrill.ps1
  • Amazon Web Services - AWS-Start-CloudGrill.ps1
  • Oracle Cloud Infrastructure - oci-start-cloudgrill.py

Each script reads a CSV"recipe card" containing your VMs and their desired start/stop times, then automatically manages their power states like a master chef managing multiple ovens.

Let the Magic Happen

The scripts will automatically manage your VM lifecycle with chef-level precision

Check Current VM States

Automatically detects the current power state of all VMs in your schedule before making any changes.

Compare Against Schedules

Intelligently compares current time against your defined start/stop windows for each VM.

Start VMs During Operating Hours

Automatically starts VMs when current time falls within their scheduled operating window.

Stop VMs Outside Operating Hours

Safely stops VMs when current time is outside their scheduled operating window.

Colorful Chef-Themed Output

Beautiful, easy-to-read console output with cooking metaphors and color-coded status messages.

Multi-Cloud Support

Consistent scheduling experience across Azure, AWS, Google Cloud, and Oracle Cloud platforms.

Choose Your Cloud Kitchen

Select the script for your cloud provider and get started in minutes

Azure

Azure-Start-CloudGrill.ps1

Manages Azure Virtual Machines using PowerShell and Azure PowerShell module.

Prerequisites:

  • -PowerShell 5.1 or later
  • -Azure PowerShell module

Usage:

# Azure (PowerShell)
.\Azure-Start-CloudGrill.ps1 -CsvFilePath"vms.csv"

AWS

AWS-Start-CloudGrill.ps1

Controls AWS EC2 instances using PowerShell and AWS CLI integration.

Prerequisites:

  • -PowerShell 5.1 or later
  • -AWS CLI configured

Usage:

# AWS (PowerShell)
.\AWS-Start-CloudGrill.ps1 -CsvFilePath"vms.csv"

GCP

GCP-Start-CloudGrill.ps1

Manages Google Cloud Compute Engine instances via PowerShell and gcloud CLI.

Prerequisites:

  • -PowerShell 5.1 or later
  • -Google Cloud CLI

Usage:

# Google Cloud (PowerShell)
.\GCP-Start-CloudGrill.ps1 -CsvFilePath"vms.csv"

Oracle Cloud

oci-start-cloudgrill.py

Controls Oracle Cloud Infrastructure compute instances using Python and OCI SDK.

Prerequisites:

  • -Python 3.6 or later
  • -OCI Python SDK

Usage:

# Oracle Cloud (Python)
python oci-start-cloudgrill.py vms.csv

Recipe Cards (CSV Formats)

Each cloud has its own CSV format - see the recipe card section below

Azure Format

CSV Header:

VMName,ResourceGroupName,SubscriptionId,StartTime,StopTime

Example:

WebServer01,Production-RG,12345678-1234-1234-1234-123456789012,08:00,18:00
DatabaseServer,Production-RG,12345678-1234-1234-1234-123456789012,06:00,22:00
TestVM,Development-RG,87654321-4321-4321-4321-210987654321,09:00,17:00

Google Cloud Format

CSV Header:

VMName,Zone,ProjectId,StartTime,StopTime

Example:

web-server-01,us-central1-a,my-production-project,08:00,18:00
database-server,us-central1-b,my-production-project,06:00,22:00
test-vm,us-west1-a,my-development-project,09:00,17:00

AWS Format

CSV Header:

InstanceId,Region,InstanceName,StartTime,StopTime

Example:

i-0123456789abcdef0,us-east-1,WebServer01,08:00,18:00
i-0abcdef123456789,us-east-1,DatabaseServer,06:00,22:00
i-0fedcba987654321,us-west-2,TestInstance,09:00,17:00

Oracle Cloud Format

CSV Header:

InstanceId,CompartmentId,InstanceName,StartTime,StopTime

Example:

ocid1.instance.oc1.iad.anyhqljt...,ocid1.compartment.oc1..anyhqljt...,WebServer01,08:00,18:00
ocid1.instance.oc1.iad.anyhqljt...,ocid1.compartment.oc1..anyhqljt...,DatabaseServer,06:00,22:00
ocid1.instance.oc1.phx.anyhqljt...,ocid1.compartment.oc1..anyhqljt...,TestInstance,09:00,17:00

Schedule Logic

Time Format

  • Use 24-hour format: 08:00, 18:30, 22:15
  • Times represent daily schedules
  • Empty start/stop times are allowed

Scheduling Behavior

ScenarioAction
Current time between start and stopSTART the VM
Current time outside the windowSTOP the VM

Installation & Prerequisites

Get your kitchen ready with the right tools for each cloud provider

Azure Setup

Install Azure PowerShell

# Install Azure PowerShell
Install-Module -Name Az -AllowClobber -Scope CurrentUser

# Connect to Azure
Connect-AzAccount

Google Cloud Setup

Install Google Cloud CLI

# Install Google Cloud CLI
# https://cloud.google.com/sdk/docs/install

# Authenticate
gcloud auth login

AWS Setup

Install AWS CLI

# Install AWS CLI
# https://aws.amazon.com/cli/

# Configure credentials
aws configure

Oracle Cloud Setup

Install OCI SDK

# Install OCI SDK
pip install oci

# Configure OCI
oci setup config

Why VM Scheduling Matters

Automated VM scheduling is the secret ingredient to significant cloud cost savings

Cost Savings

Save 50-70% on VM costs by running instances only during business hours or when actually needed.

Automation

Eliminate manual VM management with automated scheduling that works consistently across all environments.

Multi-Cloud

Consistent scheduling experience across Azure, AWS, GCP, and Oracle Cloud with unified CSV format approach.

Visibility

Clear, colorful output shows exactly what actions are being taken on each VM with chef-themed messaging.

Flexibility

Easy CSV-based configuration allows for complex scheduling scenarios and quick adjustments to VM schedules.

Scalability

Manage hundreds of VMs across multiple subscriptions, projects, and accounts with a single script execution.

Ready to Get Started?

Get your multi-cloud VM scheduling automated with our chef-crafted scripts

What to do next

Pick the path that fits where you are right now.

Trust & run-safety metadata

Key execution details for Mise-en-Place: Multi-Cloud VM Scheduler so users know what they are downloading or running before they act.

Need verification guidance? See Security & Trust and Responsible Disclosure.

May change resourcesGitHub sourceExplicit + inferred metadata

Maintainer

CloudCostChefs

Last Updated

June 20, 2025

Last Tested

February 23, 2026

Minimum Access

VM start/stop permissions in each target cloud plus access to the CSV schedule source

Execution Type

GitHub-hosted multi-cloud VM scheduler scripts (PowerShell + Python for OCI)

Version

2025-06-20

SHA256 Checksum

Not published yet (recommend adding checksum for downloadable files)

Verification Notes

This tool can change VM power states across clouds. Review schedule CSV format, time zones, and provider-specific scripts before automating production workloads.

Safe Usage Checklist

  • Pilot on non-production VMs first and verify start/stop windows align with local business hours and maintenance windows.
  • Exclude critical, HA, or batch-processing VMs until owners approve automated scheduling behavior.
  • Run in a non-production subscription/account/tenancy first and capture sample output before broader rollout.
  • Use least-privilege access. Current best hint from docs: VM start/stop permissions in each target cloud plus access to the CSV schedule source.

Quick start (fast path)

Minimal steps to safely get value from this tool without reading the entire page first.

Estimated time: 15-20 minutes setup + runs automaticallyDifficulty: IntermediateAccess: Write-capable
  1. 1. Confirm scope and permissions

    Use least privilege and test in a non-production scope first. Minimum access hint: VM start/stop permissions in each target cloud plus access to the CSV schedule source.

  2. 2. Get the tool package / source

    View on GitHub and review the files before running.

    GitHub
  3. 3. Check prerequisites

    • ✅ PowerShell 5.1+ (Azure, AWS, GCP) or Python 3.6+ (Oracle Cloud)
    • ✅ Cloud CLI tools: Azure PowerShell, AWS CLI, gcloud, or OCI SDK
    • ✅ Proper cloud authentication and VM management permissions
  4. 4. Run safely and review output

    This tool can change VM power states across clouds. Review schedule CSV format, time zones, and provider-specific scripts before automating production workloads. Start with a small sample scope, then expand once results look correct.