我只想通过 Powershell 获取外部 IP,只需要 IP 地址,不需要标头或任何内容。
我尝试了很多事情,例如
(Invoke-WebRequest ifconfig.me/ip).Content
但是它有额外的第二行,这对我来说没有什么用。
我也试过了。
(Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE) | %{$_.ipaddress[0]}
但它对我来说不起作用,因为我在路由器后面。
谢谢。
Function IPV()
{
$IPCHK = ((Invoke-WebRequest ifconfig.me/ip).Content.Trim())
$IPCHK | Out-FIle 'CHKIP.txt'
}
$CurrentIP = ((Invoke-WebRequest ifconfig.me/ip).Content.Trim())
$PreviousIP = Get-Content 'CHKIP.txt'
IF($PreviousIP -eq ((Invoke-WebRequest ifconfig.me/ip).Content.Trim()))
{
$PreviousIP
}
ELSE {
##SEND EMAIL SCRIPT
IPV #RUN CHECK IP COMMAND AGAIN.
}
答案1
你已经有了答案。你只是想删除额外的行——没有什么强迫你使用
(Invoke-WebRequest ifconfig.me/ip).Content
原样。相反,你可以使用这个:
(Invoke-WebRequest ifconfig.me/ip).Content.Trim()
这String.Trim 方法“从当前 String 对象中删除所有前导和尾随空格字符。”
答案2
一种使用 OpenDNS 的方法。
Resolve-DnsName
在 Windows 8.1 / Server 2012 或更高版本的 Powershell 4 中使用CmdLet
$(Resolve-DnsName -Name myip.opendns.com -Server 208.67.222.220).IPAddress
或者在早期的 Windows 版本中,只需使用简单的 nslookup
$my_ip = ((& "nslookup" "myip.opendns.com" "208.67.222.220") |select -last 2)[0].Trim("Address:").Trim()
答案3
补充一点(但很重要)丹尼尔的回答:
(Invoke-WebRequest -UseBasicParsing ifconfig.me/ip).Content.Trim()
否则,在某些机器上您可能会遇到如下错误:
Explorer 引擎不可用,或者 Internet Explorer 的首次启动配置不完整。请指定使用基本解析参数并重试。
答案4
我对此进行了扩展,使其稍微整洁一些,并添加了 Telegram 功能。
我还删除了功能命令,因为在我的用例中不需要它们。
<# Lets set our file paths #>
$Last_IP_Path = "PATH\FILE.TXT"
$Current_IP_Path = "PATH\FILE.TXT"
<# Now we need to load our Last WAN IP #>
$PreviousIP = Get-Content $Last_IP_Path | SELECT -First 1 #ONLY Selects First Line.
<# Lets work out what our current WAN IP #>
$CurrentIP = ((Invoke-WebRequest ifconfig.me/ip).Content.Trim()) | Out-File $Current_IP_Path
<# Now that we know our current WAN IP lets make it usable #>
$CURRENTWANIP = Get-Content $Current_IP_Path | SELECT -First 1 #ONLY Selects First Line.
<# Lets Compare our IP DATA #>
IF
(
$PreviousIP -eq $CURRENTWANIP
)
{
<# Just going to echo because we don't have anything better to do #>
$PreviousIP
}
<# Now we have something to do #>
Else
{
<# Lets tell TELEGRAM our new WAN IP #>
$MyToken = "TELEGRAMTOKENHERE"
$chatID = "TELEGRAMCHATIDHERE"
$Message = "New WAN IP: $CURRENTWANIP"
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($MyToken)/sendMessage?chat_id=$($chatID)&text=$($Message)"
<# Lets update our Sauce files for the next run #>
copy-item $Current_IP_Path $Last_IP_Path -force
}