Загрузка данных


<#
.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
    }
}