Как подсчитать запущенные инстансы EC2?

Я ищу очень простой скрипт для подсчета количества запущенных экземпляров EC2 в AWS с использованием PowerShell. Я нашел несколько методов, но по какой-то причине, когда я их пробую, я не получаю ожидаемых результатов.

Самое близкое, что у меня есть, это:

$instancestate = (get-ec2instance).instances.state.name
$instancestate

который возвращает:

stopped
running
stopped
stopped
running

(список продолжается около 80 случаев)

Я хочу иметь ответ, который подсчитывает те, которые работают.


person Mike J    schedule 04.11.2014    source источник
comment
Вы пробовали: (get-ec2instance).count?   -  person arco444    schedule 04.11.2014
comment
может что-то вроде $instancestate = get-ec2instance | where {$_.instances.state.name -eq "running"}; $count = $instancestate | measure-object | select -expandproperty count?   -  person Paul    schedule 04.11.2014
comment
К сожалению, ни одно из вышеперечисленных решений не работает. Первый будет подсчитывать все экземпляры (а не только те, которые запущены, как в вопросе). Второй не учитывает _.instances.state.name - почему-то снова возвращает все экземпляры (фильтр не работает - показывает все запущенные и также остановленные). Я считаю, что это может быть ошибка в CmdLet PowerShell.   -  person Mike J    schedule 04.11.2014
comment
хорошо, тогда я думаю, (get-ec2instance).instances.state.name возвращает массив? если это так, вы можете попробовать (get-ec2instance).instances.state.name | where {$_ -eq "running"}, если нет, сообщите нам, какой тип объекта он возвращает   -  person Paul    schedule 04.11.2014
comment
Я попробовал $instancestate = (get-ec2instance).instances.state.name | где {$_ -eq работает}; но результат тот же - он показывает все экземпляры, работают ли они/остановлены/прерваны и т. д. Он говорит "Значение" и сразу под ним показывает состояние всех экземпляров (но не только тех, которые запущены).   -  person Mike J    schedule 04.11.2014
comment
вы можете получить тип объекта, используя .gettype() в $instancestate ($instancestate.gettype(). без этого это просто предположение. на основе описанного вами вывода (пожалуйста, всегда указывайте полный вывод), замена $_ на $_.value может работать   -  person Paul    schedule 04.11.2014
comment
Извиняюсь за неправильное форматирование. Это сработало, как и ожидалось. Спасибо, Пол.   -  person Mike J    schedule 05.11.2014


Ответы (1)


Я не уверен насчет других, но я предпочитаю явно назначать свои фильтры ec2 переменным, а затем перечислять их при вызове чего-то вроде Get-EC2Instance. Это упрощает работу с фильтрами, если вам нужно фильтровать по нескольким условиям.

Вот рабочий пример того, что вам нужно, где у меня есть 6 запущенных экземпляров:

# Create the filter 
PS C:\> $filterRunning = New-Object Amazon.EC2.Model.Filter -Property @{Name = "instance-state-name"; Value = "running"}

# Force output of Get-EC2Instance into a collection.
PS C:\> $runningInstances = @(Get-EC2Instance -Filter $filterRunning)

# Count the running instances (more literally, count the collection iterates)
PS C:\> $runningInstances.Count
6
person Anthony Neace    schedule 01.12.2014