通过 PowerShell 获取外部 IP

通过 PowerShell 获取外部 IP

我只想通过 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 
    }

相关内容