我需要检索一些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发布于 2019-06-26 00:51:59
出于某种原因,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'发布于 2019-06-25 23:35:15
喂!我猜最简单(也是更快)的方法是安装CURL for Windows,然后按照Google Docs for Storing and Retrieving Metadata中定义的方式处理元数据,最后如果必须使用power shell,那么您可以随时访问Google Cloud Tools for Power Shell,但有时最简单的方法是更好的,而且Google Cloud中几乎所有的示例都是基于cURL的。
希望这能对你有所帮助!快乐的脚本
https://stackoverflow.com/questions/56755704
复制相似问题