💭

PowerShell 7.3 で gcloud コマンドの実行に失敗する件の対応

2022/12/08に公開

【追記】こちらの内容は Google Cloud CLI version 413.0.0 にて解決済みです。
https://issuetracker.google.com/issues/259295558

概要

Windows にて Powershell 7.3.0 が出ていたのでアップデートしたところ、gcloud コマンドを実行すると下記のようなエラーが出る状態になりました。

C:\Users\[user]\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\bundledpython\python.exe: can't find '__main__' module in ''

検索してみたところ、下記の Issue を発見。
https://github.com/PowerShell/PowerShell/issues/18529

解決方法

下記の対応を行ったところ解決したので共有します。

  1. Powershell にて Get-Command gcloud | Select-Object Source を実行して gcloud.ps1 ファイルの場所を確認
Source
------
C:\Users\[user]\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\gcloud.ps1
  1. gcloud.ps1 ファイルを開き、109行目を下記のように書き換える

109行目にある下記の行を

$run_args_array += $cloudsdk_python_args.split(' ')

下記の形に書き換える
(split の引数に , [StringSplitOptions]::RemoveEmptyEntries を追加する)

$run_args_array += $cloudsdk_python_args.split(' ', [StringSplitOptions]::RemoveEmptyEntries)

以上で gcloud コマンドが問題無く実行できるようになりました。

参考

PowerShell 7.3 では PSNativeCommandArgumentPassing に関する機能が有効になり、引数で渡される空文字の扱いが変わったことが原因らしいです。

https://learn.microsoft.com/ja-jp/powershell/scripting/learn/experimental-features?view=powershell-7.3#psnativecommandargumentpassing

Discussion