Задача установить клиента с подключением 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:
- Как скопировать файл на компьютеры из группы
- Как распространить reg файл на сервера.
- Как найти битые профили fslogix и найти профили которые не монтировались на сервер
- Как завершить сессию на всех серверах в локальной сети.
- Как разлогинеть (logoff) всех пользователей со статусом disconnect со всех серверов windows в domain.