Перейти к содержимому

Как автоматизировать установку horizon client на пк пользователей не в домене

Задача установить клиента с подключением powershell

#requires -Version 3.0

<#
.SYNOPSIS
    Автоматический запуск VMware Horizon Client с установкой при необходимости.
.DESCRIPTION
    Скрипт проверяет доступность VDI-сервера, наличие клиента,
    при отсутствии — скачивает и устанавливает его, затем запускает подключение.
#>

$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"

# === Настройки ===
$Server = "vdi.admin.ru"
$InstallerUrl = "https://$Server/portal/downloads/VMware-Horizon-Client-2406.exe"
$InstallerPath = "$env:TEMP\VMware-Horizon-Client-2406.exe"
$ClientPath = "${env:ProgramFiles}\VMware\VMware Horizon View Client\vmware-view.exe"
$LogPath = "$env:TEMP\vdi-client-setup.log"

# === Функция логирования ===
function Write-Log {
    param(
        [string]$Message,
        [ValidateSet("Info", "Warning", "Error", "Success", "Debug")]
        [string]$Type = "Info"
    )

    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $logEntry = "[$timestamp] [$Type] $Message"

    # Запись в файл
    try {
        Add-Content -Path $LogPath -Value $logEntry -Encoding UTF8 -ErrorAction SilentlyContinue
    } catch {
        # Игнорируем ошибки записи в лог (например, если файл заблокирован)
    }

    # Вывод в консоль
    $color = switch ($Type) {
        "Success" { "Green" }
        "Warning" { "Yellow" }
        "Error"   { "Red" }
        "Debug"   { "DarkGray" }
        default   { "White" }
    }
    Write-Host "[ $($Type.ToUpper()) ] $Message" -ForegroundColor $color
}

# === Очистка старого лога (опционально) ===
if (Test-Path $LogPath) {
    try {
        Remove-Item $LogPath -Force -ErrorAction SilentlyContinue
    } catch {
        # Продолжаем даже если не удалось удалить
    }
}

Clear-Host

Write-Log "=== ЗАПУСК СКРИПТА ===" "Info"
Write-Host @"
===========================================================
   Добро пожаловать в автоматический запуск VDI-клиента!
===========================================================

Этот скрипт:
  1. Проверит доступность сервера $Server
  2. Проверит, установлен ли Horizon Client
  3. При необходимости — скачает и установит его
  4. Подключится к VDI-серверу

Лог сохраняется в: $LogPath

Убедитесь, что у вас есть подключение к корпоративной сети.
"@ -ForegroundColor Cyan

Read-Host "Нажмите Enter для продолжения"

# === Шаг 1: Проверка доступности сервера ===
Write-Log "Начинаем проверку доступности сервера: $Server" "Info"
try {
    Write-Log "Отправляем HTTPS-запрос к https://$Server (таймаут: 10 сек)..." "Debug"
    $response = Invoke-WebRequest -Uri "https://$Server" -TimeoutSec 10 -UseBasicParsing
    Write-Log "Получен ответ: StatusCode=$($response.StatusCode), ContentLength=$($response.RawContentLength)" "Debug"
    if ($response.StatusCode -eq 200) {
        Write-Log "Сервер $Server доступен и отвечает корректно." "Success"
    } else {
        throw "Сервер вернул статус $($response.StatusCode)"
    }
} catch {
    Write-Log "Ошибка при проверке сервера: $($_.Exception.Message)" "Error"
    Write-Host @"
Возможные причины:
  • Нет подключения к корпоративной сети
  • Брандмауэр блокирует доступ
  • Сервер временно не работает

Пожалуйста, убедитесь, что вы подключены к нужной сети.
"@ -ForegroundColor Red
    Read-Host "Нажмите Enter для выхода"
    exit 1
}

# === Шаг 2: Проверка установленного клиента ===
Write-Log "Проверяем наличие Horizon Client по пути: $ClientPath" "Info"
if (Test-Path $ClientPath) {
    $version = (Get-Item $ClientPath).VersionInfo.FileVersion
    Write-Log "Horizon Client найден. Версия: $version" "Success"
    Write-Log "Запуск подключения к $Server..." "Info"
    Start-Process -FilePath $ClientPath -ArgumentList "-serverURL $Server"
    Write-Log "Клиент запущен с параметром: -serverURL $Server" "Success"
    Read-Host "Нажмите Enter для завершения"
    exit 0
} else {
    Write-Log "Horizon Client не найден. Начинаем установку..." "Warning"
}

# === Шаг 3: Скачивание установщика ===
Write-Log "Начинаем скачивание установщика из: $InstallerUrl" "Info"
Write-Log "Целевой путь: $InstallerPath" "Debug"

try {
    $job = Start-Job -ScriptBlock {
        param($url, $out)
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
        Invoke-WebRequest -Uri $url -OutFile $out -UseBasicParsing
    } -ArgumentList $InstallerUrl, $InstallerPath

    # Анимация загрузки
    $spinner = @('|', '/', '-', '\')
    $i = 0
    while ($job.State -eq "Running") {
        Write-Host "`rЗагрузка $($spinner[$i % 4])" -NoNewline -ForegroundColor Cyan
        Start-Sleep -Milliseconds 200
        $i++
    }

    Receive-Job $job -ErrorAction Stop | Out-Null
    Remove-Job $job

    if (Test-Path $InstallerPath) {
        $size = (Get-Item $InstallerPath).Length
        Write-Host "`r[УСПЕХ] Загрузка завершена. Размер: $($size / 1MB -as [int]) МБ          " -ForegroundColor Green
        Write-Log "Установщик успешно скачан. Размер: $size байт" "Success"
    } else {
        throw "Файл установщика не создан после загрузки"
    }
} catch {
    Write-Log "Не удалось скачать установщик. URL: $InstallerUrl. Ошибка: $($_.Exception.Message)" "Error"
    Write-Host "URL: $InstallerUrl" -ForegroundColor Red
    Read-Host "Нажмите Enter для выхода"
    exit 2
}

# === Шаг 4: Установка клиента ===
Write-Log "Запускаем тихую установку Horizon Client..." "Info"
Write-Log "Параметры установки: /s (silent mode)" "Debug"
Write-Log "Путь к установщику: $InstallerPath" "Debug"

try {
    $process = Start-Process -FilePath $InstallerPath -ArgumentList "/s" -PassThru -Wait
    Write-Log "Установка завершена. Код выхода: $($process.ExitCode)" "Debug"

    # Ожидание появления файла клиента
    $timeout = 60
    Write-Log "Ожидание появления файла клиента: $ClientPath (макс. $timeout сек)..." "Info"
    while (!(Test-Path $ClientPath) -and $timeout -gt 0) {
        Start-Sleep -Seconds 1
        $timeout--
        if ($timeout % 10 -eq 0) {
            Write-Log "Ожидание... осталось $timeout сек" "Debug"
        }
    }

    if (Test-Path $ClientPath) {
        $version = (Get-Item $ClientPath).VersionInfo.FileVersion
        Write-Log "Horizon Client успешно установлен. Версия: $version" "Success"
    } else {
        throw "Файл клиента не найден после установки"
    }
} catch {
    Write-Log "Ошибка при установке: $($_.Exception.Message)" "Error"
    Write-Host "Возможно, изменился путь установки или требуются права администратора." -ForegroundColor Red
    Read-Host "Нажмите Enter для выхода"
    exit 3
}

# === Шаг 5: Запуск подключения ===
Write-Log "Запуск Horizon Client с подключением к $Server..." "Info"
Start-Process -FilePath $ClientPath -ArgumentList "-serverURL $Server"
Write-Log "Клиент запущен с параметром: -serverURL $Server" "Success"

Write-Host @"
===========================================================
   ГОТОВО! Клиент запущен и подключается к $Server
   Если окно не появилось — проверьте системный трей.
   Лог: $LogPath
===========================================================
"@ -ForegroundColor Green

Write-Log "Скрипт завершил работу успешно." "Success"
Read-Host "Нажмите Enter для завершения"

cmd bat

@echo off
chcp 65001 >nul
cls

echo.
echo ===========================================================
echo   Добро пожаловать в автоматический запуск VDI-клиента!
echo ===========================================================
echo.
echo Этот скрипт:
echo  1. Проверит доступность сервера vdi.voxys.ru
echo  2. Проверит, установлен ли Horizon Client
echo  3. При необходимости — скачает и установит его
echo  4. Подключится к VDI-серверу
echo.
echo Убедитесь, что у вас есть подключение к корпоративной сети.
echo.
pause
cls

setlocal

set "SERVER=vdi.admin.ru"
set "PORTAL_URL=https://%SERVER%"
set "INSTALLER_URL=https://%SERVER%/portal/downloads/VMware-Horizon-Client-2406.exe"
set "INSTALLER_PATH=%TEMP%\VMware-Horizon-Client-2406.exe"
set "VIEW_EXE=%ProgramFiles%\VMware\VMware Horizon View Client\vmware-view.exe"

:: === ШАГ 1: Проверка доступности сервера ===
echo [Проверка] Проверяем доступность %SERVER%...
powershell -Command "try { $r = Invoke-WebRequest -Uri '%PORTAL_URL%' -TimeoutSec 10 -UseBasicParsing; if ($r.StatusCode -eq 200) { exit 0 } else { exit 1 } } catch { exit 1 }"

if errorlevel 1 (
    echo.
    echo [✗] Ошибка: сервер %SERVER% недоступен.
    echo Возможные причины:
    echo   • Нет подключения к корпоративной сети
    echo   • Брандмауэр блокирует доступ
    echo   • Сервер временно не работает
    echo.
    echo Пожалуйста, убедитесь, что вы подключены к нужной сети.
    pause
    exit /b 1
)

echo [✓] Сервер %SERVER% доступен.

:: === ШАГ 2: Проверка установленного клиента ===
if exist "%VIEW_EXE%" (
    echo [✓] Horizon Client уже установлен.
    echo Запуск подключения к %SERVER%...
    start "" "%VIEW_EXE%" -serverURL %SERVER%
    goto :success
)

echo [!] Horizon Client не найден. Начинаем установку...

:: === ШАГ 3: Скачивание ===
echo.
echo Шаг 1: Скачивание установщика...
powershell -Command "$i=0; Write-Host -NoNewline 'Загрузка '; do { Write-Host -NoNewline '.'; Start-Sleep -Milliseconds 400; $i++ } while ($i -lt 10); Write-Host"
powershell -Command "try { Invoke-WebRequest -Uri '%INSTALLER_URL%' -OutFile '%INSTALLER_PATH%' -UseBasicParsing -TimeoutSec 60 } catch { exit 1 }"

if not exist "%INSTALLER_PATH%" (
    echo.
    echo [✗] Не удалось скачать установщик.
    echo Убедитесь, что файл доступен по адресу:
    echo   %INSTALLER_URL%
    pause
    exit /b 2
)

echo [✓] Загрузка завершена.

:: === ШАГ 4: Установка ===
echo Шаг 2: Установка Horizon Client...
start /min "" "%INSTALLER_PATH%" /s

:: Индикатор ожидания установки (~2 минуты максимум)
set "spinner=|/-\"
set count=0
:wait_install
if %count% gtr 240 goto install_done
ping -n 2 127.0.0.1 >nul
set /a count+=1
set /a idx=count %% 4
call :get_spinner_char %idx%
<nul set /p "=%char% "
goto wait_install

:get_spinner_char
setlocal enabledelayedexpansion
set "chars=|/-\"
set char=!chars:~%1,1!
endlocal & set char=%char%
exit /b

:install_done
echo.
if not exist "%VIEW_EXE%" (
    echo [✗] Установка завершена, но клиент не найден.
    echo Возможно, изменился путь установки или нужны права администратора.
    pause
    exit /b 3
)
echo [✓] Установка успешно завершена.

:: === ШАГ 5: Запуск ===
echo Шаг 3: Подключение к %SERVER%...
start "" "%VIEW_EXE%" -serverURL %SERVER%

:success
echo.
echo ===========================================================
echo   Готово! Клиент запущен и подключается к vdi.voxys.ru
echo   Если окно не появилось — проверьте системный трей.
echo ===========================================================
echo.
pause

powershell v2

#requires -Version 3.0

<#
.SYNOPSIS
    Автоматический запуск VMware Horizon Client с установкой при необходимости.
.DESCRIPTION
    Скрипт проверяет доступность VDI-сервера, наличие клиента,
    при отсутствии — удаляет старый установщик (если есть), скачивает свежий,
    устанавливает и запускает подключение.
#>
$OutputEncoding = [System.Text.Encoding]::UTF8
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"

# === Настройки ===
$Server = "vdi.admin.ru"
$InstallerUrl = "https://$Server/portal/downloads/VMware-Horizon-Client-2406.exe"
$InstallerPath = "$env:TEMP\VMware-Horizon-Client-2406.exe"
$ClientPath = "${env:ProgramFiles}\VMware\VMware Horizon View Client\vmware-view.exe"
$LogPath = "$env:TEMP\vdi-client-setup.log"

# === Функция логирования ===
function Write-Log {
    param(
        [string]$Message,
        [ValidateSet("Info", "Warning", "Error", "Success", "Debug")]
        [string]$Type = "Info"
    )

    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $logEntry = "[$timestamp] [$Type] $Message"

    # Запись в файл
    try {
        Add-Content -Path $LogPath -Value $logEntry -Encoding UTF8 -ErrorAction SilentlyContinue
    } catch {
        # Игнорируем ошибки записи в лог
    }

    # Вывод в консоль
    $color = switch ($Type) {
        "Success" { "Green" }
        "Warning" { "Yellow" }
        "Error"   { "Red" }
        "Debug"   { "DarkGray" }
        default   { "White" }
    }
    Write-Host "[ $($Type.ToUpper()) ] $Message" -ForegroundColor $color
}

# === Очистка старого лога (опционально) ===
if (Test-Path $LogPath) {
    try {
        Remove-Item $LogPath -Force -ErrorAction SilentlyContinue
    } catch {
        # Продолжаем даже если не удалось удалить
    }
}

Clear-Host

Write-Log "=== ЗАПУСК СКРИПТА ===" "Info"
Write-Host @"
===========================================================
   Добро пожаловать в автоматический запуск VDI-клиента!
===========================================================

Этот скрипт:
  1. Проверит доступность сервера $Server
  2. Проверит, установлен ли Horizon Client
  3. При необходимости — удалит старый установщик,
     скачает свежий и установит клиент
  4. Подключится к VDI-серверу

Лог сохраняется в: $LogPath

Убедитесь, что у вас есть подключение к корпоративной сети.
"@ -ForegroundColor Cyan

Read-Host "Нажмите Enter для продолжения"

# === Шаг 1: Проверка доступности сервера ===
Write-Log "Начинаем проверку доступности сервера: $Server" "Info"
try {
    Write-Log "Отправляем HTTPS-запрос к https://$Server (таймаут: 10 сек)..." "Debug"
    $response = Invoke-WebRequest -Uri "https://$Server" -TimeoutSec 10 -UseBasicParsing
    if ($response.StatusCode -eq 200) {
        Write-Log "Сервер $Server доступен и отвечает корректно." "Success"
    } else {
        throw "Сервер вернул статус $($response.StatusCode)"
    }
} catch {
    Write-Log "Ошибка при проверке сервера: $($_.Exception.Message)" "Error"
    Write-Host @"
Возможные причины:
  • Нет подключения к корпоративной сети
  • Брандмауэр блокирует доступ
  • Сервер временно не работает

Пожалуйста, убедитесь, что вы подключены к нужной сети.
"@ -ForegroundColor Red
    Read-Host "Нажмите Enter для выхода"
    exit 1
}

# === Шаг 2: Проверка установленного клиента ===
Write-Log "Проверяем наличие Horizon Client по пути: $ClientPath" "Info"
if (Test-Path $ClientPath) {
    $version = (Get-Item $ClientPath).VersionInfo.FileVersion
    Write-Log "Horizon Client найден. Версия: $version" "Success"
    Write-Log "Запуск подключения к $Server..." "Info"
    Start-Process -FilePath $ClientPath -ArgumentList "-serverURL $Server"
    Write-Log "Клиент запущен с параметром: -serverURL $Server" "Success"
    Read-Host "Нажмите Enter для завершения"
    exit 0
} else {
    Write-Log "Horizon Client не найден. Начинаем установку..." "Warning"
}

# === Шаг 3: Удаление старого установщика и скачивание свежего ===
Write-Log "Проверка: клиент не установлен. Удаляем старый установщик (если есть) и скачиваем заново." "Info"

if (Test-Path $InstallerPath) {
    try {
        Remove-Item -Path $InstallerPath -Force
        Write-Log "Старый установщик удалён: $InstallerPath" "Debug"
    } catch {
        Write-Log "Не удалось удалить старый установщик: $($_.Exception.Message)" "Warning"
    }
}

Write-Log "Начинаем скачивание свежей версии установщика из: $InstallerUrl" "Info"
Write-Log "Целевой путь: $InstallerPath" "Debug"

try {
    $job = Start-Job -ScriptBlock {
        param($url, $out)
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
        Invoke-WebRequest -Uri $url -OutFile $out -UseBasicParsing
    } -ArgumentList $InstallerUrl, $InstallerPath

    # Анимация загрузки
    $spinner = @('|', '/', '-', '\')
    $i = 0
    while ($job.State -eq "Running") {
        Write-Host "`rЗагрузка $($spinner[$i % 4])" -NoNewline -ForegroundColor Cyan
        Start-Sleep -Milliseconds 200
        $i++
    }

    Receive-Job $job -ErrorAction Stop | Out-Null
    Remove-Job $job

    if (Test-Path $InstallerPath) {
        $size = (Get-Item $InstallerPath).Length
        Write-Host "`r[УСПЕХ] Загрузка завершена. Размер: $($size / 1MB -as [int]) МБ          " -ForegroundColor Green
        Write-Log "Установщик успешно скачан. Размер: $size байт" "Success"
    } else {
        throw "Файл установщика не создан после загрузки"
    }
} catch {
    Write-Log "Не удалось скачать установщик. URL: $InstallerUrl. Ошибка: $($_.Exception.Message)" "Error"
    Write-Host "URL: $InstallerUrl" -ForegroundColor Red
    Read-Host "Нажмите Enter для выхода"
    exit 2
}

# === Шаг 4: Установка клиента ===
Write-Log "Запускаем тихую установку Horizon Client..." "Info"
Write-Log "Параметры установки: /s (silent mode)" "Debug"
Write-Log "Путь к установщику: $InstallerPath" "Debug"

try {
    $process = Start-Process -FilePath $InstallerPath -ArgumentList "/s" -PassThru -Wait
    Write-Log "Установка завершена. Код выхода: $($process.ExitCode)" "Debug"

    # Ожидание появления файла клиента
    $timeout = 60
    Write-Log "Ожидание появления файла клиента: $ClientPath (макс. $timeout сек)..." "Info"
    while (!(Test-Path $ClientPath) -and $timeout -gt 0) {
        Start-Sleep -Seconds 1
        $timeout--
        if ($timeout % 10 -eq 0) {
            Write-Log "Ожидание... осталось $timeout сек" "Debug"
        }
    }

    if (Test-Path $ClientPath) {
        $version = (Get-Item $ClientPath).VersionInfo.FileVersion
        Write-Log "Horizon Client успешно установлен. Версия: $version" "Success"
    } else {
        throw "Файл клиента не найден после установки"
    }
} catch {
    Write-Log "Ошибка при установке: $($_.Exception.Message)" "Error"
    Write-Host "Возможно, изменился путь установки или требуются права администратора." -ForegroundColor Red
    Read-Host "Нажмите Enter для выхода"
    exit 3
}

# === Шаг 5: Запуск подключения ===
Write-Log "Запуск Horizon Client с подключением к $Server..." "Info"
Start-Process -FilePath $ClientPath -ArgumentList "-serverURL $Server"
Write-Log "Клиент запущен с параметром: -serverURL $Server" "Success"

Write-Host @"
===========================================================
   ГОТОВО! Клиент запущен и подключается к $Server
   Если окно не появилось — проверьте системный трей.
   Лог: $LogPath
===========================================================
"@ -ForegroundColor Green

Write-Log "Скрипт завершил работу успешно." "Success"
Read-Host "Нажмите Enter для завершения"

 

 

Similar Posts:

Добавить комментарий

Яндекс.Метрика