Сценарий Powershell для обновления групп безопасности AWS на основе динамической ошибки IP - PullRequest
0 голосов
/ 26 августа 2018

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

Мне также нужна ваша помощь в изменении приведенного ниже сценария для удаления старого IP-адреса при обновлении до нового IP-адреса.

Сценарий

# to get current ip address in cidr format 

$ipinfo = Invoke-RestMethod http://ipinfo.io/json

$ipinfo.ip | out-file -filepath currentip -NoNewline

$ipCidr = Add-Content -Path "currentip" -Value "/32"     

# take current ip address and update the security group 
# the second part I am getting an error message pasted below 

$ipchange =  @{ IpProtocol="tcp"; FromPort="1433"; ToPort="1433"; IpRanges=$ipCidr}

Grant-EC2SecurityGroupIngress -GroupId sg-0d28d1cbc04d5df91 -Region us-east-2 -IpPermission @($ipchange)

Error

<# Grant-EC2SecurityGroupIngress: невозможно связать параметр 'IpPermission. Невозможно создать объект типа "Amazon.EC2.Model.IpPermission". Тип объекта «System.Management.Automation.PSObject» не может быть преобразован в тип 'System.Collections.Generic.List`1 [System.String]. В C: \ users \ inayet \ desktop \ aws-amazon \ scripts \ runCurrentIP.ps1: 15 char: 93 + ... pId sg-0d28d1cbc04d5df91 -Rigion us-east-2 -IpPermission @ ($ ipchange) + ~~~~~~~~~~~~ + CategoryInfo: InvalidArgument: (:) [Grant-EC2SecurityGroupIngress], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Amazon.PowerShell.Cmdlets.EC2.GrantEC2SecurityGroupIngressCmdlet #>

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

Похоже, что в этом сообщении об ошибке говорится, что командлет Grant-EC2SecurityGroupIngress ожидал объект типа Amazon.EC2.Model.IpPermission и не может создать его из переданных вами аргументов.

В вашем коде есть подозрение, чтоможет объяснить ошибку:

$ipCidr = Add-Content -Path "currentip" -Value "/32"

Ничто не возвращается Add-Content, который только добавляет строки в файлы, поэтому $ipCidr ничего не содержит на этом этапе.

Возможно, вы захотите попробовать

$ipCidr = Get-Content -path "currentip"

прежде чем вы продолжите заполнять хеш-таблицу:

$ipchange =  @{ IpProtocol="tcp"; FromPort="1433"; ToPort="1433"; IpRanges=$ipCidr}

Синтаксис массива @(), который вы поместили вокруг $IpRanges, также необязателен и, вероятно, также является основнымучастник сообщения об ошибке, которое вы получаете.

Grant-EC2SecurityGroupIngress -GroupId sg-0d28d1cbc04d5df91 -Region us-east-2 -IpPermission $ipchange

Теперь, когда элемент IpRanges больше не пустой, powershell может выполнить преобразование в Amazon.EC2.Model.IpPermission.

0 голосов
/ 29 августа 2018

Спасибо всем за помощь !!!

Вот решение проблемы, с которой я столкнулся.

# to get current ip address in cidr format

$ipinfo = Invoke-RestMethod http://ipinfo.io/json

$ipinfo.ip +"/32" | out-file -filepath currentip -NoNewline

$ipCidr = Get-Content -Path currentip

$ipchange = @{ IpProtocol="tcp"; FromPort="1433"; ToPort="1433"; IpRanges=$ipCidr} $ipchange

Grant-EC2SecurityGroupIngress -GroupId sg-123456789 -Region us-east-2 -IpPermission $ipchange

0 голосов
/ 26 августа 2018

Чтобы исправить сообщение об ошибке приведения типа, добавьте этот код чуть ниже строки add-content.

$ ipCidr = $ ipCidr -as [int]

Вы говорите, что хотите, чтобы строковое значение, хранящееся в $ ipCidr, было преобразовано в целочисленное значение.

Теперь возникает другая проблема: переменная $ ipCidr = Add-Content -Path "currenttip" -Value "/ 32" -NoNewline не выводит значение.

когда я котирую текущую подсказку, я получаю правильный адрес ip cidr, но когда я вывожу значение $ ipCidr, файл пуст, и я получаю следующее сообщение об ошибке «Вы не можете вызвать метод для выражения с нулевым значением."

как сохранить целочисленное значение, хранящееся в файле currenttip, в переменной $ ipCidr?

...