Дано: я, который пишет сносные скрипты на bash/cmd и до этого момента старательно игнорировавший ООП. Я админ, поэтому не ругайтесь.
Возникла проблема портирования скрипта из bash в powershell. И что-то уже на четвертой строчке я взвыл.
С операторами даты, а также с for и if вообще беда… чтобы применить их на раз, необходимо учить основы всего языка, а это очень долго, и сильно мешает производительности, а скрипт надо сдавать…
#создание переменной "ID виртуальной машины", путем получения ее из метаданных, доступных по протоколу tcp/ip. Портировал в powershell самостоятельно.
export INSTANCE_ID=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`
# создание переменной "ID раздела жесткого диска", путем отсеивания из таблицы нужных строк по паттерну и отображения только нужного столбца. Портировал в powershell самостоятельно.
export INSTANCE_EBS_VOL=`/usr/local/bin/aws ec2 describe-volumes | grep $INSTANCE_ID | awk '{ print $7}'`
#создание снапшота. Тут вроде без трудностей
/usr/local/bin/aws ec2 create-snapshot --volume-id $INSTANCE_EBS_VOL
# Цикл. Переменную $snapshot получаем способом, аналогичным описанному выше — в таблице describe-snapshots ищем совпадение с паттерном $INSTANCE_EBS_VOL | сокращаем количество пробелов до одного | заменяем все пробелы на запятые (это костыли, чтобы for обрабатывал не каждое слово, а строку целиком)
for snapshot in `/usr/local/bin/aws ec2 describe-snapshots | grep $INSTANCE_EBS_VOL | awk '$1=$1' | sed 's/\ /,/g'`;
do
#получаем нужную строку, заменяем запятые на пробелы обратно (см. костыль), выводим нужный нам столбец
snapid=`echo $snapshot | sed 's/,/\ /g' | awk '{ print $6 }'`
#получаем нужную строку, заменяем запятые на пробелы обратно (см. костыль), выводим нужный нам столбец. Ну и тут еще во всех строчках удаляем паттерн .000Z
snapdate=`echo $snapshot | sed 's/,/\ /g' | awk '{ print $7 }' | sed 's/.000Z//g'`
#преобразовываем дату, полученную в переменной выше к дате unix-формата (количество секунд с 00:00:00 1970-01-01 UTC)
snaptime=`date --date $snapdate +%s`
#какая-то константа. Эталонная дата, с ней нужно сравнивать остальные
datefromrecipe=2014-06-05
#Преобразовали эталонную дату в UNIX-формат (см. выше)
correctday=`date --date $datefromrecipe +%s`
#Математическая операция вычитания. Разница между эталоном и датой снапшота, полученной выше
timediff=$[ ($correctday - $snaptime) ]
#если разница между эталоном и датой снапшота будет больше, чем 86400 секунд (1 сутки), то
if [ $timediff -lt 86400 ]
then
echo "$snapid will be deleted"
#удаляем снапшот, имя которого получено из переменной выше
/usr/local/bin/aws ec2 delete-snapshot --snapshot-id $snapid
fi;
done