Понял, что это была проблема с кодировкой символов. Ранее я получал строку в AppVeyor, используя
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($env:GCLOUD_TOKEN)) | Out-File .\token.json
, который записывал файл как UTF-16LE. Связанный Python gcloud не заботился об этом. Моя следующая попытка использовала Set-Content -Encoding utf8 .\token.json
, но это записывает UTF-8 с спецификацией, которую gcloud все еще не может обработать. Наконец-то все заработало:
$content = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($env:GCLOUD_TOKEN)) ; $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False ; [System.IO.File]::WriteAllLines('token.json', $content, $Utf8NoBomEncoding)