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