我有一个EC2实例,并且我正在运行一个Powershell脚本,我希望在其中获取运行EC2的区域。
目前,我有类似这样的变通方法,它首先获取可用区。可用区的格式类似于'us-east-1a‘。
$region = invoke-restmethod -uri http://169.254.169.254/latest/meta-data/placement/availability-zone
if ($region -like "*east*") {$region = "us-east-1"} ELSE {$region = "us-west-2"} 我只想获取区域,而不是获取可用区,然后进行一些修改。我知道有这样一种可能性:
http://169.254.169.254/latest/dynamic/instance-identity/document这将返回一个包含区域的JSON对象,但我还需要解析JSON才能实现这一点。
如何只获取区域?
发布于 2017-08-23 02:06:09
这样行得通吗?
PS C:\> $region = invoke-restmethod -uri http://169.254.169.254/latest/meta-data/placement/availability-zone
PS C:\> $region.Substring(0,$region.Length-1)发布于 2019-05-17 11:11:25
解析可用区并不是最安全的方式。地域名称可作为实例身份文档的属性,该属性在实例启动时生成。使用Powershell有两个选项可以读取此信息:
您可以使用Invoke-WebRequest:
IWR (也称为curl和wget)运行良好,但它只能处理超文本标记语言。所以您需要一个额外的步骤来解析JSON。默认情况下,它使用IE接口来解析DOM,但您可以使用-UseBasicParsing选项来避免这种情况。
PS C:\> curl http://169.254.169.254/latest/dynamic/instance-identity/document | ConvertFrom-Json | Select region
region
------
us-east-1
PS C:\> (curl http://169.254.169.254/latest/dynamic/instance-identity/document | ConvertFrom-Json).region
us-east-1但是Invoke-RestMethod是最好的选择:
由于这是一个REST接口,IRM是最好的选择,因为它本身就支持JSON和XML。
PS C:\> irm http://169.254.169.254/latest/dynamic/instance-identity/document | Select region
region
------
us-east-1
PS C:\> (irm http://169.254.169.254/latest/dynamic/instance-identity/document).region
us-east-1
PS C:\> irm http://169.254.169.254/latest/dynamic/instance-identity/document | % region
us-east-1https://stackoverflow.com/questions/45823518
复制相似问题