homeip
homeip_add_task.ps1
$TaskName = "Update Home IP Every Minute"
$ScriptPath = "C:\Users\shs\Documents\homeip.vbs" # Укажите полный путь к вашему скрипту
$LogPath = "c:\temp\homeip-log.txt" # Путь для лог-файла
# Создание действия с параметрами для скрытого выполнения
$Action = New-ScheduledTaskAction `
-Execute "wscript.exe" `
-Argument "$ScriptPath"
# Создание триггера (каждую минуту)
$Trigger = New-ScheduledTaskTrigger `
-Once `
-At (Get-Date) `
-RepetitionInterval (New-TimeSpan -Minutes 1)
# Настройки задачи - ВАЖНО: добавляем скрытое выполнение
$Settings = New-ScheduledTaskSettingsSet `
-AllowStartIfOnBatteries `
-DontStopIfGoingOnBatteries `
-StartWhenAvailable `
-RestartCount 3 `
-RestartInterval (New-TimeSpan -Minutes 1) `
-Hidden # Это ключевой параметр!
# Регистрация задачи
Register-ScheduledTask `
-TaskName $TaskName `
-Action $Action `
-Trigger $Trigger `
-Settings $Settings `
-RunLevel Highest `
-Description "Автоматическое обновление домашнего IP-адреса каждую минуту"
Write-Host "Задача `"$TaskName`" успешно создана!" -ForegroundColor Green
homeip.vbs
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "powershell.exe -ExecutionPolicy Bypass -NonInteractive -File ""C:\Users\shs\Documents\homeip.ps1""", 0, False
homeip.ps1
# Список сервисов для получения IP (в порядке приоритета)
$ipServices = @(
"http://ipinfo.io/ip",
"http://checkip.amazonaws.com",
"http://api.ipify.org"
)
# Получение IP с резервными сервисами
$externalIP = $null
$usedService = ""
foreach ($service in $ipServices) {
try {
Write-Host "Попытка получить IP с $service..." -ForegroundColor Yellow
$response = Invoke-RestMethod -Uri $service -TimeoutSec 10
$externalIP = $response.ToString().Trim()
# Проверка что получен валидный IP
if ($externalIP -match '^\d+\.\d+\.\d+\.\d+$') {
$usedService = $service
Write-Host "IP успешно получен с $usedService : $externalIP" -ForegroundColor Green
break
} else {
Write-Host "Неверный формат ответа: $externalIP" -ForegroundColor Red
$externalIP = $null
}
}
catch {
Write-Host "Ошибка при запросе к $service : $($_.Exception.Message)" -ForegroundColor Red
$externalIP = $null
}
}
if (-not $externalIP) {
Write-Host "Не удалось получить IP-адрес со всех сервисов" -ForegroundColor Red
exit 1
}
# Параметры FTP
$ftpServer = "Fvqf7pLSUbV6EoR5I/OazNW9y9Qt5gNwew9R0ujCcuk="
$ftpUser = "qItc+GdO3fLIvGafywGjBEryt7oVjlJ7" # Ваш логин для FTP
$ftpPass = "lg5HuYAV2x4ZUJjgRVb2OgKwDfE41q6Z" # Ваш пароль для FTP
$remoteFile = "/home-ip.txt" # Файл на сервере
# Убедимся, что адрес FTP правильный
$ftpUri = "ftp://$ftpServer$remoteFile"
Write-Host "Попытка подключения к: $ftpUri"
# Создание временного файла
$tempFile = [System.IO.Path]::GetTempFileName()
$externalIP | Out-File -FilePath $tempFile -Encoding ASCII
try {
# Создание FTP-запроса
$ftpRequest = [System.Net.FtpWebRequest]::Create($ftpUri)
$ftpRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$ftpRequest.Credentials = New-Object System.Net.NetworkCredential($ftpUser, $ftpPass)
$ftpRequest.UseBinary = $true
$ftpRequest.KeepAlive = $false
$ftpRequest.UsePassive = $true # Добавляем пассивный режим
# Чтение файла и отправка на FTP
$fileContent = [System.IO.File]::ReadAllBytes($tempFile)
$ftpRequestStream = $ftpRequest.GetRequestStream()
$ftpRequestStream.Write($fileContent, 0, $fileContent.Length)
$ftpRequestStream.Close()
Write-Host "IP-адрес успешно загружен на FTP: $externalIP" -ForegroundColor Green
# Логирование успешной операции
$logEntry = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - IP $externalIP обновлен через $usedService"
$logEntry | Out-File "C:\temp\homeip-log.txt" -Append
}
catch {
Write-Host "Ошибка при загрузке на FTP: $($_.Exception.Message)" -ForegroundColor Red
# Дополнительная информация об ошибке
if ($_.Exception.InnerException) {
Write-Host "Внутренняя ошибка: $($_.Exception.InnerException.Message)" -ForegroundColor Yellow
}
# Логирование ошибки
$errorEntry = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - Ошибка FTP: $($_.Exception.Message)"
$errorEntry | Out-File "C:\temp\homeip-log.txt" -Append
}
finally {
# Удаление временного файла
if (Test-Path $tempFile) {
Remove-Item $tempFile -Force
}
}
Write-Host "Скрипт завершил выполнение" -ForegroundColor Cyan
homeip.txt · Последнее изменение: — 127.0.0.1
