Powershell 脚本,用于根据动态 IP 错误更新 AWS 安全组



我创建了一个将在任务计划程序中运行的Powershell脚本,以根据我的公有IP地址更新我的AWS安全组。当我运行此脚本时,我收到一条错误消息,如下所示。

我还希望您帮助修改下面的脚本,以便在更新到新 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)

错误

<#>

要解决类型转换错误消息,请在添加内容行的正下方添加此代码。

$ipCidr = $ipCidr -as [int]

你的意思是你希望存储在$ipCidr中的字符串值转换为整数值。

现在出现了另一个问题是变量 $ipCidr = 添加内容 -路径 "currentip" -值 "/32" -NoNewline 不输出值。

当我 cat currentip 时,我得到了正确的 ip cidr 地址,但是当我输出 $ipCidr 的值时,文件为空,并且我收到以下错误消息"您无法在空值表达式上调用方法"。

如何将存储在当前IP文件中的整数值存储到变量$ipCidr?

该错误消息似乎说 cmdletGrant-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

感谢大家的贡献!!

这是我遇到的问题的解决方案。

# 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

最新更新