<#
.SYNOPSIS
Исправленный скрипт установки драйвера с принт-сервера на RDP.
#>
# --- НАСТРОЙКИ ---
$PrintServer = "PrintServer01"
$DriverSearchPattern = "TASKalfa 3501i"
$LocalTempPath = "C:\Temp\PrinterDriver"
# -----------------
try {
Write-Host "1. Перезапуск службы Диспетчера печати (Spooler)..." -ForegroundColor Cyan
Restart-Service -Name Spooler -Force
Write-Host "2. Получение данных реестра принт-сервера..." -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) {
throw "Драйвер не найден в реестре сервера $PrintServer."
}
Write-Host "Найден драйвер: '$TargetDriverKey'" -ForegroundColor Green
# --- ИСПРАВЛЕННЫЙ БЛОК ПУТЕЙ ---
# 1. Читаем путь к .inf из реестра
$InfPathOnServer = ($WmiReg.GetStringValue($HKLM, "$DriversKey\$TargetDriverKey", "InfPath")).sValue
# 2. Извлекаем только папку из полного пути к файлу
$ServerFolder = Split-Path -Path$InfPathOnServer -Parent
# 3. Преобразуем локальный диск (C:\...) в сетевой формат (\\Server\C$\...)
$DriveLetter =$ServerFolder.Substring(0, 1)
$PathWithoutDrive =$ServerFolder.Substring(3)
$NetworkFolder = "\\$PrintServer\$DriveLetter\`$$PathWithoutDrive"
Write-Host "Сетевая папка драйвера: $NetworkFolder" -ForegroundColor Yellow
# --- КОПИРОВАНИЕ И ИМПОРТ ---
Write-Host "3. Создание локальной папки на RDP..." -ForegroundColor Cyan
if (Test-Path -Path $LocalTempPath) {
Remove-Item -Path $LocalTempPath -Recurse -Force
}
New-Item -ItemType Directory -Path $LocalTempPath -Force | Out-Null
Write-Host "4. Копирование файлов..." -ForegroundColor Cyan
Copy-Item -Path "$NetworkFolder\*" -Destination $LocalTempPath -Recurse -Force
# Поиск файла .inf
$LocalInfItem = Get-ChildItem -Path$LocalTempPath -Filter "*.inf" | Select-Object -First 1
if (-not $LocalInfItem) {
throw "INF-файл не найден в скопированной папке."
}
$LocalInfFile =$LocalInfItem.FullName
Write-Host "5. Добавление в DriverStore (pnputil)..." -ForegroundColor Cyan
pnputil.exe /add-driver "$LocalInfFile" /install
Write-Host "6. Регистрация драйвера через printui.dll..." -ForegroundColor Cyan
$printuiArgs = "/ia /m `"$TargetDriverKey`" /f `"$LocalInfFile`" /h `"x64`""
$process = Start-Process -FilePath "rundll32.exe" -ArgumentList "printui.dll,PrintUIEntry $printuiArgs" -Wait -PassThru -NoNewWindow
Write-Host "Проверка установки драйвера:" -ForegroundColor Cyan
Get-PrinterDriver -Name $TargetDriverKey
}
catch {
Write-Error "Ошибка при выполнении: $_"
}
finally {
if (Test-Path -Path $LocalTempPath) {
Remove-Item -Path $LocalTempPath -Recurse -Force -ErrorAction SilentlyContinue
}
}