我创建了一个将在任务计划程序中运行的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