<#
.SYNOPSIS
Установка драйвера с принт-сервера без WinRM и без использования Get-PrinterDriverFromInf.
#>
# --- НАСТРОЙКИ ---
$PrintServer = "PrintServer01"
# ЧАСТЬ имени драйвера для поиска в реестре (например, "TASKalfa 3501i" или "Kyocera")
$DriverSearchPattern = "TASKalfa 3501i"
$LocalTempPath = "C:\Temp\PrinterDriver"
# -----------------
try {
Write-Host "1. Подключение к реестру принт-сервера через WMI..." -ForegroundColor Cyan
$HKLM = [uint32]2147483650
$WmiReg = [WMIClass]"\\$PrintServer\root\default:StdRegProv"
# Ищем ключ драйвера в реестре принт-сервера
$DriversKey = "SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3"
$SubKeys = ($WmiReg.EnumKey($HKLM, $DriversKey)).sNames
$TargetDriverKey = $SubKeys | Where-Object { $_ -like "*$DriverSearchPattern*" } | Select-Object -First 1
if (-not $TargetDriverKey) {
# Проверяем Version-4, если не нашли в Version-3
$DriversKeyV4 = "SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-4"
$SubKeysV4 = ($WmiReg.EnumKey($HKLM, $DriversKeyV4)).sNames
$TargetDriverKey = $SubKeysV4 | Where-Object { $_ -like "*$DriverSearchPattern*" } | Select-Object -First 1
$DriversKey = $DriversKeyV4
}
if (-not $TargetDriverKey) {
throw "Не удалось найти драйвер, содержащий '$DriverSearchPattern', в реестре принт-сервера."
}
Write-Host "Точное имя драйвера на принт-сервере: '$TargetDriverKey'" -ForegroundColor Green
# Читаем путь к InfPath
$RegKeyPath = "$DriversKey\$TargetDriverKey"
$InfPathOnServer = ($WmiReg.GetStringValue($HKLM, $RegKeyPath, "InfPath")).sValue
# Формируем сетевой путь через C$
$ServerDriverFolder = Split-Path $InfPathOnServer -Parent
$NetworkDriverFolder = "\\$PrintServer\" + ($ServerDriverFolder -replace ':', '$')
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. Копирование файлов драйвера из $NetworkDriverFolder ..." -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. Импорт драйвера в DriverStore RDP-сервера (pnputil)..." -ForegroundColor Cyan
$pnpOutput = pnputil.exe /add-driver "$($LocalInfFile.FullName)" /install
Write-Host $pnpOutput
Write-Host "5. Регистрация драйвера в системе печати (Add-PrinterDriver)..." -ForegroundColor Cyan
# Передаем точное имя, считанное из реестра принт-сервера
# Название драйвера на RDP должно быть 1-в-1 как в реестре принт-сервера
Add-PrinterDriver -Name $TargetDriverKey -ErrorAction Stop
Write-Host "УСПЕХ! Драйвер '$TargetDriverKey' успешно установлен на RDP-сервер." -ForegroundColor Green
}
catch {
Write-Error "Ошибка при установке: $_"
}
finally {
if (Test-Path $LocalTempPath) {
Write-Host "Очистка временных файлов..." -ForegroundColor Yellow
Remove-Item -Path $LocalTempPath -Recurse -Force -ErrorAction SilentlyContinue
}
}