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