Search code examples
google-cloud-platformgoogle-cloud-shellgcloud-cli

How to get shell script to work on gcloud CLI in PowerShell?


I've installed the gcloud CLI according to https://cloud.google.com/sdk/docs/install.

When using cloud shell on browser, I could simply paste a script and it would work. But it won't do the same when using cloud CLI on Powershell.

Script:

# List Projects accessible to these credentials
PROJECTS=$( `
  gcloud projects list `
  --format="value(projectId)")

# Iterate over each Project
for PROJECT in ${PROJECTS} 
do
  echo "Project: ${PROJECT}"
  # Check Compute Engine service
  ENABLED="$( `
    gcloud services list `
    --project=${PROJECT} `
    --filter=config.name=compute.googleapis.com `
    --format='value(state)')"
  # Is it enabled?
  if [ "${ENABLED}" = "ENABLED" ]
  then
    # Enumerate Disks that have `users` and output `name`
    gcloud compute disks list `
    --project=${PROJECT} `
    --filter="-users:*" `
    --format="csv(name,sizeGb,zone,status,type,lastAttachTimestamp,lastDetachTimestamp)"
  fi
done

Result on browser cloud shell: successfully iterated through projects and listed disks in that project.

Result on Powershell:

PS C:\WINDOWS\System32> C:\Users\minh.tran\Documents\Get Disk.ps1
At C:\Users\minh.tran\Documents\Get Disk.ps1:7 char:4
+ for PROJECT in ${PROJECTS}
+    ~
Missing opening '(' after keyword 'for'.
At C:\Users\minh.tran\Documents\Get Disk.ps1:8 char:3
+ do
+   ~
Missing statement body in do loop.
At C:\Users\minh.tran\Documents\Get Disk.ps1:17 char:5
+   if [ "${ENABLED}" = "ENABLED" ]
+     ~
Missing '(' after 'if' in if statement.
At C:\Users\minh.tran\Documents\Get Disk.ps1:17 char:7
+   if [ "${ENABLED}" = "ENABLED" ]
+       ~
Missing type name after '['.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword
 

PS C:\WINDOWS\System32> 

Solution

  • The comment from @John Hanley is the correct answer. I tried to use a Linux shell script as a PowerShell script on a Windows machine.

    The simplest solution for my case is to convert the shell script to a PowerShell script and run the converted script from PowerShell.

    Converted script can be found here: GCP | disks.list method returning error when ran as part of a script . Despite working, it is still throwing some errors.