<#
.SYNOPSIS
Установка драйвера с принт-сервера без использования WinRM.
Использует WMI (RPC) для чтения реестра и административную шару C$.
#>
# --- НАСТРОЙКИ ---
$PrintServer = "PrintServer01"
# Точное имя драйвера (как в свойствах принт-сервера)
$DriverName = "Kyocera TASKalfa 3501i KX"
# Локальная временная папка на RDP-сервере
$LocalTempPath = "C:\Temp\PrinterDriver"
# -----------------
try {
Write-Host "1. Подключение к принт-серверу через WMI (без WinRM)..." -ForegroundColor Cyan
# Подключаемся к реестру удаленного сервера через StdRegProv (WMI)
$HKLM = [uint32]2147483650
$RegKeyPath = "SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3\$DriverName"
$WmiReg = [WMIClass]"\\$PrintServer\root\default:StdRegProv"
$InfPathOnServer = ($WmiReg.GetStringValue($HKLM, $RegKeyPath, "InfPath")).sValue
if (-not $InfPathOnServer) {
# Если драйвер Version-4, проверяем ветку Version-4
$RegKeyPathV4 = "SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-4\$DriverName"
$InfPathOnServer = ($WmiReg.GetStringValue($HKLM, $RegKeyPathV4, "InfPath")).sValue
}
if (-not $InfPathOnServer) {
throw "Не удалось найти путь к драйверу '$DriverName'. Проверьте точное имя или доступ к WMI (RPC)."
}
# Преобразуем C:\Windows\... в сетевой путь \\PrintServer\C$\Windows\...
$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. Импорт драйвера в DriverStore RDP-сервера (pnputil)..." -ForegroundColor Cyan
$pnpOutput = pnputil.exe /add-driver "$($LocalInfFile.FullName)" /install
Write-Host $pnpOutput
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
}
}