<#
.SYNOPSIS
Автоматический поиск, копирование и установка драйвера принтера
из DriverStore принт-сервера на RDP-сервер.
#>
# --- НАСТРОЙКИ ---
# Имя принт-сервера или его IP
$PrintServer = "PrintServer01"
# Точное имя драйвера, как оно отображается в свойствах сервера печати
$DriverName = "Kyocera TASKalfa 3501i KX"
# Локальная временная папка на RDP-сервере
$LocalTempPath = "C:\Temp\PrinterDriver"
# -----------------
try {
Write-Host "1. Подключение к реестру принт-сервера для поиска пути драйвера..." -ForegroundColor Cyan
# Обращаемся к реестру принт-сервера (требуются права администратора на принт-сервере)
$RegPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3\$DriverName"
# Считываем путь к INF-файлу из реестра принт-сервера
$InfPathOnServer = (Invoke-Command -ComputerName $PrintServer -ScriptBlock {
param($path)
(Get-ItemProperty -Path $path -ErrorAction Stop).InfPath
} -ArgumentList $RegPath)
if (-not $InfPathOnServer) {
throw "Не удалось найти сведения о драйвере '$DriverName' в реестре сервера $PrintServer."
}
# InfPath содержит полный путь, например: C:\Windows\System32\DriverStore\FileRepository\hpcu160u.inf_amd64_...\hpcu160u.inf
# Извлекаем путь к папочке в сетевом формате C$
$ServerDriverFolder = Split-Path $InfPathOnServer -Parent
$NetworkDriverFolder = "\\$PrintServer\" + ($ServerDriverFolder -replace ':', '$')
Write-Host "Папка драйвера найдена: $NetworkDriverFolder" -ForegroundColor Green
Write-Host "2. Подготовка локальной папки на RDP-сервере..." -ForegroundColor Cyan
if (Test-Path $LocalTempPath) { Remove-Item $LocalTempPath -Recurse -Force }
New-Item -ItemType Directory -Path $LocalTempPath -Force | Out-Null
Write-Host "3. Копирование содержимого папки драйвера..." -ForegroundColor Cyan
Copy-Item -Path "$NetworkDriverFolder\*" -Destination $LocalTempPath -Recurse -Force
# Находим скопированный INF-файл
$LocalInfFile = Get-ChildItem -Path $LocalTempPath -Filter "*.inf" | Select-Object -First 1
if (-not $LocalInfFile) {
throw "INF-файл не найден в скопированных файлах."
}
Write-Host "4. Добавление драйвера в Driver Store RDP-сервера (pnputil)..." -ForegroundColor Cyan
pnputil.exe /add-driver "$($LocalInfFile.FullName)" /install
Write-Host "5. Регистрация драйвера печати..." -ForegroundColor Cyan
Add-PrinterDriver -Name $DriverName
Write-Host "Драйвер '$DriverName' успешно установлен!" -ForegroundColor Green
}
catch {
Write-Error "Ошибка: $_"
}
finally {
if (Test-Path $LocalTempPath) {
Write-Host "Очистка временных файлов..." -ForegroundColor Yellow
Remove-Item -Path $LocalTempPath -Recurse -Force -ErrorAction SilentlyContinue
}
}