我需要检索某些GCP Windows实例的外部IP。
我尝试请求实例元数据(https://cloud.google.com/compute/docs/storing-retrieving-metadata)。
这适用于使用curl的Linux实例:
$ curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip
35.XXX.XXX.XXX
但是,我无法使用Powershell在Windows实例上使用它:
> (Invoke-WebRequest -UseBasicParsing -Headers @{"Metadata-Flavor"="Google"} "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip").Content
51
53
46
50
49
46
46
57
49
57
46
55
我使用Windows-2019和Windows-2016公共映像在不同的实例上进行了尝试。
使用标准gcloud命令行启动实例:
gcloud compute instances create $instance-name \
--image-project windows-cloud \
--image-family windows-2019 \
--machine-type n1-standard-1 \
--boot-disk-size 50 \
--boot-disk-type pd-ssd \
--zone europe-west1-b
答案 0 :(得分:0)
Y! 我猜最简单(也是最快的方法)是安装CURL for Windows,然后按照Storing and Retrieving Metadata的Google文档中定义的方式处理元数据,最后,如果必须使用Power Shell,则可以总是访问Google Cloud Tools for Power Shell,但是有时最简单的方法越好,并且几乎所有Google Cloud示例都基于cURL。
希望这对您有用! 脚本编写愉快
答案 1 :(得分:0)
出于某种原因,Invoke-WebRequest
会忽略Content-Type: application/text
并将其视为字节数组。
您可以将字节转换为字符串:
[System.Text.Encoding]::UTF8.GetString(
(Invoke-WebRequest -Headers @{'Metadata-Flavor'='Google'} -Uri 'http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip').Content
)
或使用Invoke-RestMethod
:
Invoke-RestMethod -Headers @{'Metadata-Flavor'='Google'} -Uri 'http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip'