如何使用实例元数据检索GCP Windows实例的外部IP?

时间:2019-06-25 13:53:19

标签: windows powershell google-cloud-platform google-compute-engine

我需要检索某些GCP Windows实例的外部IP。

我尝试请求实例元数据(https://cloud.google.com/compute/docs/storing-retrieving-metadata)。

外部IP的端点为http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip

这适用于使用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

2 个答案:

答案 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'