1

経由で AMI ID を正常に収集していますがGet-EC2ImageByName、最新の「not-rc」AMI をプルする方法を決定しようとしています。

私は現在実行しています:

Get-EC2ImageByName -Names *amzn-ami-pv*x86_64*ebs* - | Select-Object -ExpandProperty "ImageId" -First 1

それは私に与えます:

ami-978639e4

私が実行すると:

Get-EC2ImageByName -Names *amzn-ami-pv*x86_64*ebs*

最初の 2 つのエントリは次のとおりです。

Architecture        : x86_64
BlockDeviceMappings : {/dev/sda1}
CreationDate        : 2016-02-27T22:30:03.000Z
Description         : Amazon Linux AMI 2016.03.rc-0 x86_64 PV EBS
Hypervisor          : xen
ImageId             : ami-978639e4
ImageLocation       : amazon/amzn-ami-pv-2016.03.rc-0.x86_64-ebs
ImageOwnerAlias     : amazon
ImageType           : machine
KernelId            : aki-52a34525
Name                : amzn-ami-pv-2016.03.rc-0.x86_64-ebs
OwnerId             : 137112412989
Platform            : 
ProductCodes        : {}
Public              : True
RamdiskId           : 
RootDeviceName      : /dev/sda1
RootDeviceType      : ebs
SriovNetSupport     : 
State               : available
StateReason         : 
Tags                : {}
VirtualizationType  : paravirtual

Architecture        : x86_64
BlockDeviceMappings : {/dev/sda1}
CreationDate        : 2016-02-10T22:22:22.000Z
Description         : Amazon Linux AMI 2015.09.2 x86_64 PV EBS
Hypervisor          : xen
ImageId             : ami-a93484da
ImageLocation       : amazon/amzn-ami-pv-2015.09.2.x86_64-ebs
ImageOwnerAlias     : amazon
ImageType           : machine
KernelId            : aki-52a34525
Name                : amzn-ami-pv-2015.09.2.x86_64-ebs
OwnerId             : 137112412989
Platform            : 
ProductCodes        : {}
Public              : True
RamdiskId           : 
RootDeviceName      : /dev/sda1
RootDeviceType      : ebs
SriovNetSupport     : 
State               : available
StateReason         : 
Tags                : {}
VirtualizationType  : paravirtual

「rc」エントリを無視して、名前に「rc」が含まれていない最初の AMI ID、または最初の「not rc」AMI ID を取得しようとしています。この例では、必要な AMI-ID は次のとおりです。

ami-a93484da

" "を使わずにこれを達成する方法を知っている人はいます-Skip 1か? -Skip 1(たとえば、2 つ以上の "rc" リリースがある場合など、スクリプトを反復可能にしようとしているため、" " の使用を避けています。

助けてくれてありがとう!

4

1 に答える 1

2

名前の他の部分が変更されないと仮定すると、正規表現を使用して、インクリメントされた "rc- digits " 値に対して将来的に保証することができます。次の式を使用できます。

".rc-\d+."

この式は、文字列「.rc- digits」を調べます。文字列の任意の場所で、数字は 1 つ以上の数字にすることができます。そこから、目的の出力をソートおよびフィルタリングできます。

以下は、私が次のことを行う簡単なライブテストです。

  • 指定した名前に一致する画像を取得します。
  • 結果を Where-Object (エイリアス: ?) にパイプし、 で結果を除外します-notmatch。ここで、表現に一致しない結果を明示的に探しています。
  • 最新の AMI CreationDate で並べ替えます。(これは、新しいリリースが後でリリースされることを前提としています)
  • 出力するImageId、Name、CreationDateを選択します。
  • 式全体をラップして@()出力をコレクションとして強制し、 を指定してそのコレクションの最初の項目を取得します[0]

例:

PS C:/> @(Get-EC2ImageByName -Names "amzn-ami-pv*x86_64*ebs*" | `
Where-Object { $_.Name -notmatch ".rc-\d+." } | `
Sort CreationDate -Desc | `
Select ImageId, Name, CreationDate)[0]

出力:

ImageId 名前 CreationDate
------- ---- ------------
ami-d4f7ddbe amzn-ami-pv-2015.09.2.x86_64-ebs 2016-02-10T22:21:22.000Z
于 2016-03-11T00:24:05.663 に答える