获取公网IP脚本
写了一个获取公网IP脚本
SCHTASKS /CREATE /SC MINUTE /MO 10 /TN "GetPublicIP" /TR "powershell -ExecutionPolicy Bypass -File E:\bat\getip.ps1" /F
# FTP 配置
$ftpServer = "ftp://xxx"
$ftpUser = "xxx"
$ftpPass = "xxx"
$ipFile = "ip.txt"
$localDir = "E:/bat/txt/"
$localFile = "$localDir$ipFile"
# 日志目录 & 日志文件名(每天生成一个新日志)
$logDir = "E:/bat/logs/"
$logFile = "$logDir$(Get-Date -Format "yyyy-MM-dd").log"
# 确保日志目录和文本目录存在
if (!(Test-Path $localDir)) { New-Item -ItemType Directory -Path $localDir -Force }
if (!(Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir -Force }
# 记录日志函数
function Write-Log {
param (
[string]$message
)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$timestamp - $message" | Out-File -Append -Encoding utf8 $logFile
}
# 获取公网 IP
function Get-PublicIP {
try {
return (Invoke-WebRequest -Uri "https://api64.ipify.org" -UseBasicParsing).Content
} catch {
Write-Log "获取公网 IP 失败: $_"
return $null
}
}
# 读取上次保存的 IP
$lastIp = if (Test-Path $localFile) { Get-Content $localFile } else { "" }
# 获取当前公网 IP 和获取时间
$currentIp = Get-PublicIP
$currentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
if ($currentIp -eq $null) {
Write-Log "无法获取公网 IP,脚本终止。"
exit
}
# 组合 IP + 获取时间
$currentIpInfo = "$currentIp ($currentTime)"
# 如果 IP 发生变化
if ($currentIp -ne $lastIp) {
Write-Log "新的公网 IP: $currentIpInfo"
$currentIpInfo | Out-File -Encoding utf8 $localFile
# 上传到 FTP
try {
$ftpUri = "$ftpServer/$ipFile"
$webClient = New-Object System.Net.WebClient
$webClient.Credentials = New-Object System.Net.NetworkCredential($ftpUser, $ftpPass)
$webClient.UploadFile($ftpUri, $localFile)
Write-Log "公网 IP 已更新,并上传到 FTP:$ftpUri"
} catch {
Write-Log "FTP 上传失败: $_"
}
} else {
Write-Log "公网 IP 未变更: $currentIpInfo"
}

浙公网安备 33010602011771号