diff --git a/buildkite/bazelci.py b/buildkite/bazelci.py
index c0f990e..97b1732 100644
--- a/buildkite/bazelci.py
+++ b/buildkite/bazelci.py
@@ -200,11 +200,23 @@
     }
 
 
-def python_binary(platform=None):
-    if platform == "windows":
+def python_binary():
+    if is_windows():
         return "python.exe"
     return "python3.6"
 
+def is_windows():
+    return os.name == 'nt'
+
+def gsutil_command():
+    if is_windows():
+        return "gsutil.cmd"
+    return "gsutil"
+
+def gcloud_command():
+    if is_windows():
+        return "gsutil.cmd"
+    return "gsutil"
 
 def bazelcipy_url():
     """
@@ -387,8 +399,8 @@
         return __github_token__
     try:
         execute_command(
-            ["gsutil", "cp", "gs://bazel-encrypted-secrets/github-token.enc", "github-token.enc"])
-        __github_token__ = subprocess.check_output(["gcloud", "kms", "decrypt", "--location", "global", "--keyring", "buildkite",
+            [gsutil_command(), "cp", "gs://bazel-encrypted-secrets/github-token.enc", "github-token.enc"])
+        __github_token__ = subprocess.check_output([gcloud_command(), "kms", "decrypt", "--location", "global", "--keyring", "buildkite",
                                                     "--key", "github-token", "--ciphertext-file", "github-token.enc",
                                                     "--plaintext-file", "-"]).decode("utf-8").strip()
         return __github_token__
@@ -780,7 +792,7 @@
 
 def runner_step(platform, project_name=None, http_config=None,
                 git_repository=None, use_but=False):
-    command = python_binary(platform) + \
+    command = python_binary() + \
         " bazelci.py runner --platform=" + platform
     if http_config:
         command += " --http_config=" + http_config
@@ -855,7 +867,7 @@
 
 
 def bazel_build_step(platform, project_name, http_config=None, build_only=False, test_only=False):
-    pipeline_command = python_binary(platform) + " bazelci.py runner"
+    pipeline_command = python_binary() + " bazelci.py runner"
     if build_only:
         pipeline_command += " --build_only --save_but"
     if test_only:
@@ -929,7 +941,7 @@
     attempt = 0
     while attempt < 5:
         output = subprocess.check_output(
-            ["gsutil", "stat", bazelci_builds_metadata_url()])
+            [gsutil_command(), "stat", bazelci_builds_metadata_url()])
         match = re.search("Generation:[ ]*([0-9]+)", output.decode("utf-8"))
         if not match:
             raise BuildkiteException(
@@ -943,7 +955,7 @@
         expected_md5hash = base64.b64decode(match.group(1))
 
         output = subprocess.check_output(
-            ["gsutil", "cat", bazelci_builds_metadata_url()])
+            [gsutil_command(), "cat", bazelci_builds_metadata_url()])
         hasher = hashlib.md5()
         hasher.update(output)
         actual_md5hash = hasher.digest()
@@ -975,7 +987,7 @@
         }
         for platform in supported_platforms():
             bazel_binary_path = download_bazel_binary(tmpdir, platform)
-            execute_command(["gsutil", "cp", "-a", "public-read", bazel_binary_path,
+            execute_command([gsutil_command(), "cp", "-a", "public-read", bazel_binary_path,
                              bazelci_builds_upload_url(platform, build_number)])
             info["platforms"][platform] = {
                 "url": bazelci_builds_download_url(platform, build_number),
@@ -988,7 +1000,7 @@
 
         try:
             execute_command([
-                "gsutil",
+                gsutil_command(),
                 "-h", "x-goog-if-generation-match:" + expected_generation,
                 "-h", "Content-Type:application/json",
                 "cp", "-a", "public-read",
