Вот здесь, над "Адрес" надо вставить поле с название "Блок для ВК ППРов"

Add-Type -AssemblyName System.Windows.Forms

# Функция для создания выпадающего списка с автозаполнением
function Create-AutoCompleteComboBox {
    param (
        [int]$LocationX,
        [int]$LocationY,
        [string[]]$Items,
        [string]$DefaultItem
    )
    $comboBox = New-Object System.Windows.Forms.ComboBox
    $comboBox.Location = New-Object System.Drawing.Point($LocationX, $LocationY)
    $comboBox.Size = New-Object System.Drawing.Size(200, 20)
    $comboBox.AutoCompleteMode = 'SuggestAppend'
    $comboBox.AutoCompleteSource = 'ListItems'
    foreach ($item in $Items) {
        $comboBox.Items.Add($item) | Out-Null
    }
    if ($DefaultItem) {
        $comboBox.SelectedItem = $DefaultItem
    }
    return $comboBox
}

# Главное меню
function Show-GuiMenu {
    $form = New-Object System.Windows.Forms.Form
    $form.Text = "Генератор ППР"
    $form.Size = New-Object System.Drawing.Size(800, 500)

    # Кнопка для создания ППР по замене дисков
    $diskButton = New-Object System.Windows.Forms.Button
    $diskButton.Location = New-Object System.Drawing.Point(100, 50)
    $diskButton.Size = New-Object System.Drawing.Size(400, 30)
    $diskButton.Text = "Создать ППР по замене дисков"
    $diskButton.Add_Click({
        $form.Close()
        Show-DiskPPRForm
    })
    $form.Controls.Add($diskButton)

    # Кнопка для создания ППР по обновлению СХД
    $updateButton = New-Object System.Windows.Forms.Button
    $updateButton.Location = New-Object System.Drawing.Point(100, 100)
    $updateButton.Size = New-Object System.Drawing.Size(400, 30)
    $updateButton.Text = "Создать ППР по обновлению СХД"
    $updateButton.Add_Click({
        $form.Close()
        Show-UpdatePPRForm
    })
    $form.Controls.Add($updateButton)

    # Кнопка выхода
    $exitButton = New-Object System.Windows.Forms.Button
    $exitButton.Location = New-Object System.Drawing.Point(100, 150)
    $exitButton.Size = New-Object System.Drawing.Size(400, 30)
    $exitButton.Text = "Выход"
    $exitButton.Add_Click({
        $form.Close()
    })
    $form.Controls.Add($exitButton)

    $form.ShowDialog()
}

# Форма для создания ППР по замене дисков
function Show-DiskPPRForm {
    $form = New-Object System.Windows.Forms.Form
    $form.Text = "ППР по замене дисков"
    $form.Size = New-Object System.Drawing.Size(900, 500)

    # Текстовое поле для номера заявки Yadro
    $incLabel = New-Object System.Windows.Forms.Label
    $incLabel.Location = New-Object System.Drawing.Point(10, 20) 
    $incLabel.Text = "Введите номер заявки Yadro:"
    $form.Controls.Add($incLabel)

    $incTextBox = New-Object System.Windows.Forms.TextBox
    $incTextBox.Location = New-Object System.Drawing.Point(150, 20) 
    $incTextBox.Size = New-Object System.Drawing.Size(200, 20)
    $form.Controls.Add($incTextBox)

    # Текстовое поле для номера заявки НТ
    $taskLabel = New-Object System.Windows.Forms.Label
    $taskLabel.Location = New-Object System.Drawing.Point(360, 20)  
    $taskLabel.Text = "Введите номер заявки НТ:"
    $form.Controls.Add($taskLabel)

    $taskTextBox = New-Object System.Windows.Forms.TextBox
    $taskTextBox.Location = New-Object System.Drawing.Point(500, 20)  
    $taskTextBox.Size = New-Object System.Drawing.Size(200, 20)
    $form.Controls.Add($taskTextBox)

    # Выпадающий список для количества дисков
    $diskOptions = @("SAS диска", "2-х SAS дисков", "3-х SAS дисков", "4-х SAS дисков", "5-и SAS дисков", "6-и SAS дисков", "7-и SAS дисков", "8-и SAS дисков", "9-и SAS дисков", "Свой вариант")
    $diskLabel = New-Object System.Windows.Forms.Label
    $diskLabel.Location = New-Object System.Drawing.Point(10, 60)  
    $diskLabel.Text = "Количество дисков:"
    $form.Controls.Add($diskLabel)

    $diskComboBox = Create-AutoCompleteComboBox -LocationX 150 -LocationY 60 -Items $diskOptions -DefaultItem $diskOptions[0]
    $form.Controls.Add($diskComboBox)

    # Скрытое текстовое поле для "Свой вариант" (для дисков)
    $customDiskLabel = New-Object System.Windows.Forms.Label
    $customDiskLabel.Location = New-Object System.Drawing.Point(10, 90)
    $customDiskLabel.Text = "Введите количество дисков:"
    $customDiskLabel.Visible = $false
    $form.Controls.Add($customDiskLabel)

    $customDiskTextBox = New-Object System.Windows.Forms.TextBox
    $customDiskTextBox.Location = New-Object System.Drawing.Point(150, 90)  
    $customDiskTextBox.Size = New-Object System.Drawing.Size(200, 20)
    $customDiskTextBox.Visible = $false
    $form.Controls.Add($customDiskTextBox)

    # Обработчик изменения выбранного значения в ComboBox (для дисков)
    $diskComboBox.Add_SelectedIndexChanged({
        if ($diskComboBox.SelectedItem -eq "Свой вариант") {
            $customDiskLabel.Visible = $true
            $customDiskTextBox.Visible = $true
        } else {
            $customDiskLabel.Visible = $false
            $customDiskTextBox.Visible = $false
        }
    })

    # Выпадающий список для времени работ
    $timeOptions = @("1 час", "2 часа", "3 часа", "4 часа", "5 часов", "6 часов", "7 часов", "8 часов", "9 часов", "Свой вариант")
    $timeLabel = New-Object System.Windows.Forms.Label
    $timeLabel.Location = New-Object System.Drawing.Point(360, 60)  
    $timeLabel.Text = "Время работ:"
    $form.Controls.Add($timeLabel)

    $timeComboBox = Create-AutoCompleteComboBox -LocationX 500 -LocationY 60 -Items $timeOptions -DefaultItem $timeOptions[0]
    $form.Controls.Add($timeComboBox)

    # Скрытое текстовое поле для "Свой вариант" (для времени)
    $customTimeLabel = New-Object System.Windows.Forms.Label
    $customTimeLabel.Location = New-Object System.Drawing.Point(360, 90)  
    $customTimeLabel.Text = "Введите время работы:"
    $customTimeLabel.Visible = $false
    $form.Controls.Add($customTimeLabel)

    $customTimeTextBox = New-Object System.Windows.Forms.TextBox
    $customTimeTextBox.Location = New-Object System.Drawing.Point(500, 90)  
    $customTimeTextBox.Size = New-Object System.Drawing.Size(200, 20)
    $customTimeTextBox.Visible = $false
    $form.Controls.Add($customTimeTextBox)

    # Обработчик изменения выбранного значения в ComboBox (для времени)
    $timeComboBox.Add_SelectedIndexChanged({
        if ($timeComboBox.SelectedItem -eq "Свой вариант") {
            $customTimeLabel.Visible = $true
            $customTimeTextBox.Visible = $true
        } else {
            $customTimeLabel.Visible = $false
            $customTimeTextBox.Visible = $false
        }
    })

    # Новые значения адресов
    $addressOptions = @(
        "Россия, 163046, г. Архангельск, ул. Карла Либкнехта, д. 23, к.1",
        "Россия, 236009, г. Калининград, Б. Окружная 4-я ул., д.63б",
        "Россия, 115230, г. Москва, Электролитный пр-д, д. 3, стр. 1",
        "Россия, 630039, г. Новосибирск, ул. Воинская, д. 63/7",
        "Россия, 614068, г. Пермь, ул. Дзержинского, д. 1, к. 27",
        "Россия, 344065, г. Ростов-На-Дону, ул. Вятская, д. 75/1",
        "Россия, 680007, г. Хабаровск, ул. Волочаевская, д. 8д",
        "Россия, 150030, г. Ярославль, ул. Технопарковая, д. 5",
        "Россия, 633100, г. Новосибирск, Толмачевский сельсовет, 40, 1, платформа 3307 км"
    )

    # Выпадающий список для адреса
    $addressLabel = New-Object System.Windows.Forms.Label
    $addressLabel.Location = New-Object System.Drawing.Point(10, 120)
    $addressLabel.Text = "Адрес:"
    $form.Controls.Add($addressLabel)

    $addressComboBox = Create-AutoCompleteComboBox -LocationX 150 -LocationY 120 -Items $addressOptions -DefaultItem $addressOptions[0]
    $form.Controls.Add($addressComboBox)

    # Новый массив значений для руководителя и производителя работ
    $workerOptions = @(
        "Азаренко Антон Александрович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Амелькин Матвей Юрьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Ануфриева Екатерина Михайловна <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Баранов Максим Сергеевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Бондаренко Антон Игоревич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Василенко Андрей Павлович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Гноевой Андрей Андреевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Гончарова Анна Алексеевна <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Граборов Андрей Геннадьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Гриньков Егор Васильевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Даудов Руслан Зайналбекович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Даудов Станислав Зайналбекович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Ерошина Дарья Павловна <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Захарченко Андрей Андреевич 89154079103",
        "Зимаков Кирилл Антонович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Идрисов Айдар Ильдусович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Казакявичюс Альгирдас Роландо <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Ковалевский Игорь Витальевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Кокорин Вячеслав Юрьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Колесников Сергей Юрьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Кремчугова Дарья Дмитриевна <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Кузнецов Андрей Юрьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Лапик Алина Андреевна <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Ломакин Максим Игоревич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Максимов Сергей Юрьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Малевский Александр Эдмондович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Масликов Алексей Юрьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Маторин Евгений Юрьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Минин Андрей Вячеславович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Мягков Вадим Павлович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Огородников Владислав Сергеевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Панфилов Олег Игоревич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Раев Александр Сергеевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Раев Сергей Викторович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Рау Сергей Эдуардович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Редин Михаил Юрьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Рычков Алексей Викторович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Савельев Данила Дмитриевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Садыков Тимур Ильдусович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Сетов Александр Вадимович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Суржиков Александр Сергеевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Сысоев Георгий Александрович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Таванцев Матвей Александрович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Танасевич Сергей Николаевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Фальбуш Павел Борисович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Хохлачев Алексей Олегович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Хрипков Константин Валерьевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Хусаинов Марс Маратович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Черная Дарья Александровна <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Шакурова Светлана Александровна <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Шамсутдинов Фанур Флюсович <PRESIDIO_ANONYMIZED_PHONE_NUMBER>",
        "Швецов Алексей Андреевич <PRESIDIO_ANONYMIZED_PHONE_NUMBER>"
    )

    # Поля для руководителя работ и производителя работ
    $workerLabel = New-Object System.Windows.Forms.Label
    $workerLabel.Location = New-Object System.Drawing.Point(10, 150)
    $workerLabel.Text = "Руководитель работ:"
    $form.Controls.Add($workerLabel)

    $workerComboBox = Create-AutoCompleteComboBox -LocationX 150 -LocationY 150 -Items $workerOptions -DefaultItem $workerOptions[0]
    $form.Controls.Add($workerComboBox)

    $manufacturerLabel = New-Object System.Windows.Forms.Label
    $manufacturerLabel.Location = New-Object System.Drawing.Point(10, 180)
    $manufacturerLabel.Text = "Производитель работ:"
    $form.Controls.Add($manufacturerLabel)

    $manufacturerComboBox = Create-AutoCompleteComboBox -LocationX 150 -LocationY 180 -Items $workerOptions -DefaultItem $workerOptions[0]
    $form.Controls.Add($manufacturerComboBox)

    $dateLabel = New-Object System.Windows.Forms.Label
    $dateLabel.Location = New-Object System.Drawing.Point(10, 210)
    $dateLabel.Text = "Дата проведения работ:"
    $form.Controls.Add($dateLabel)

    $dateTimePicker = New-Object System.Windows.Forms.DateTimePicker
    $dateTimePicker.Location = New-Object System.Drawing.Point(150, 210)
    $dateTimePicker.Size = New-Object System.Drawing.Size(200, 20)
    $form.Controls.Add($dateTimePicker)

    # Кнопка для выбора файла диагностики
    $diagnosticFileButton = New-Object System.Windows.Forms.Button
    $diagnosticFileButton.Location = New-Object System.Drawing.Point(10, 250) 
    $diagnosticFileButton.Size = New-Object System.Drawing.Size(200, 30)
    $diagnosticFileButton.Text = "Загрузите файл с СХД"
    $diagnosticFileButton.Add_Click({
        $filename = Get-FileDialogResult -Filter "Text Files (*.txt)|*.txt|All Files (*.*)|*.*" -Title "Выберите файл диагностики с СХД"
        if ($filename) {
            # Извлекаем только имя файла из полного пути
            $fileNames = Split-Path $filename -Leaf
            $diagnosticFileLabel.Text = "Выбранный файл: $fileNames"
        }
    })
    $form.Controls.Add($diagnosticFileButton)

    $diagnosticFileLabel = New-Object System.Windows.Forms.Label
    $diagnosticFileLabel.Location = New-Object System.Drawing.Point(10, 290)
    $diagnosticFileLabel.Size = New-Object System.Drawing.Size(200, 40)
    $diagnosticFileLabel.AutoSize = $false
    $diagnosticFileLabel.Text = "Выбранный файл: "
    $form.Controls.Add($diagnosticFileLabel)

    # Кнопка для выбора шаблона ППР
    $templateFileButton = New-Object System.Windows.Forms.Button
    $templateFileButton.Location = New-Object System.Drawing.Point(220, 250) 
    $templateFileButton.Size = New-Object System.Drawing.Size(200, 30)
    $templateFileButton.Text = "Загрузите шаблон ППР"
    $templateFileButton.Add_Click({
        $templateFile = Get-FileDialogResult -Filter "Word Documents (*.docx)|*.docx" -Title "Выберите шаблон Word"
        if ($templateFile) {
			# Извлекаем только имя файла из полного пути
            $templateFiles = Split-Path $templateFile -Leaf
            $templateFileLabel.Text = "Выбранный шаблон: $templateFiles"
        }
    })
    $form.Controls.Add($templateFileButton)

    $templateFileLabel = New-Object System.Windows.Forms.Label
    $templateFileLabel.Location = New-Object System.Drawing.Point(220, 290)
    $templateFileLabel.Size = New-Object System.Drawing.Size(200, 40)
    $templateFileLabel.AutoSize = $false
    $templateFileLabel.Text = "Выбранный шаблон: "
    $form.Controls.Add($templateFileLabel)

    # Кнопка для выбора шаблона ВК ППР
    $vkTemplateFileButton = New-Object System.Windows.Forms.Button
    $vkTemplateFileButton.Location = New-Object System.Drawing.Point(440, 250) 
    $vkTemplateFileButton.Size = New-Object System.Drawing.Size(200, 30)
    $vkTemplateFileButton.Text = "Загрузите шаблон ВК ППР"
    $vkTemplateFileButton.Add_Click({
        $vkTemplateFile = Get-FileDialogResult -Filter "Word Documents (*.docx)|*.docx" -Title "Выберите шаблон ВК ППР"
        if ($vkTemplateFile) {
			# Извлекаем только имя файла из полного пути
            $vkTemplateFiles = Split-Path $vkTemplateFile -Leaf
            $vkTemplateFileLabel.Text = "Выбранный шаблон ВК: $vkTemplateFiles"
        }
    })
    $form.Controls.Add($vkTemplateFileButton)

    $vkTemplateFileLabel = New-Object System.Windows.Forms.Label
    $vkTemplateFileLabel.Location = New-Object System.Drawing.Point(440, 290)
    $vkTemplateFileLabel.Size = New-Object System.Drawing.Size(200, 40)
    $vkTemplateFileLabel.AutoSize = $false
    $vkTemplateFileLabel.Text = "Выбранный шаблон ВК: "
    $form.Controls.Add($vkTemplateFileLabel)

    # Кнопка для создания ППР
    $createButton = New-Object System.Windows.Forms.Button
    $createButton.Location = New-Object System.Drawing.Point(400, 340)
    $createButton.Size = New-Object System.Drawing.Size(200, 30)
    $createButton.Text = "Составить ППР"
    $createButton.Add_Click({
        $INC = $incTextBox.Text.Trim()
        $TASK = $taskTextBox.Text.Trim()
        $numberDiskInput = if ($diskComboBox.SelectedItem -eq "Свой вариант") { $customDiskTextBox.Text.Trim() } else { $diskComboBox.SelectedItem }
        $timeworkInput = if ($timeComboBox.SelectedItem -eq "Свой вариант") { $customTimeTextBox.Text.Trim() } else { $timeComboBox.SelectedItem }
        $addressInput = $addressComboBox.SelectedItem
        $workerInput = $workerComboBox.SelectedItem
        $manufacturerInput = $manufacturerComboBox.SelectedItem
        $workDateInput = $dateTimePicker.Value.ToShortDateString()
        $diagnosticFile = $diagnosticFileLabel.Text.Split(":")[-1].Trim()
        $templateFile = $templateFileLabel.Text.Split(":")[-1].Trim()
        $vkTemplateFile = $vkTemplateFileLabel.Text.Split(":")[-1].Trim()

        if ([string]::IsNullOrWhiteSpace($INC) -or [string]::IsNullOrWhiteSpace($TASK)) {
            [System.Windows.Forms.MessageBox]::Show("Поля INC и TASK не могут быть пустыми.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        if (-not $diagnosticFile) {
            [System.Windows.Forms.MessageBox]::Show("Файл диагностики не выбран.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        if (-not $templateFile) {
            [System.Windows.Forms.MessageBox]::Show("Шаблон ППР не выбран.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        if ($diskComboBox.SelectedItem -eq "Свой вариант" -and [string]::IsNullOrWhiteSpace($numberDiskInput)) {
            [System.Windows.Forms.MessageBox]::Show("Значение количества дисков не может быть пустым.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        if ($timeComboBox.SelectedItem -eq "Свой вариант" -and [string]::IsNullOrWhiteSpace($timeworkInput)) {
            [System.Windows.Forms.MessageBox]::Show("Значение времени работы не может быть пустым.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        # Обработка файла и создание документа
        $content = Get-Content -Path $diagnosticFile
        $SHDPartNumberInput = $content[-1].Split()[0]

        # Регулярные выражения
        $uuidPattern = 'uuid=([a-zA-Z0-9\-]+)'
        $scsiPattern = 'scsi-([a-zA-Z0-9]+)'
        $resourcePattern = '([a-zA-Z0-9]{33})'
        $drivePattern = '^Drive\s+[a-zA-Z0-9]+'

        # Списки для найденных ресурсов и идентификаторов
        $resourcesList = @()
        $scsiIds = @()
        $firstOutputLines = @()
        $counter = 0

        # Поиск в содержимом
        for ($i = 0; $i -lt $content.Length; $i++) {
            $line = $content[$i]

            # Поиск UUID
            if ($line -match $uuidPattern) {
                $shortUuid = $matches[1]
                Write-Host "" 

                # Поиск дисков "scsi-..."
                for ($j = $i - 1; $j -ge 0; $j--) {
                    if ($content[$j] -match $scsiPattern) {
                        $counter++
                        $scsiDisk = $matches[0]
                        Write-Host "Диск ${counter}: ${scsiDisk}"
                        break
                    }
                }

                # Извлечение ресурса
                foreach ($fullLine in $content) {
                    if ($fullLine -match "/dev/mapper/[^\s]*$shortUuid" -and $fullLine -match $resourcePattern) {
                        $foundResource = $matches[1]
                        Write-Host "Его ресурс: $foundResource"
                        $resourcesList += $foundResource
                    }
                }
            }
        }

        # Уникальные идентификаторы затронутых ресурсов
        $uniqueResources = $resourcesList | Select-Object -Unique

        # Поиск затронутых ресурсов для консоли
        Write-Host "`nЗатронутые ресурсы:"
        $isAfterNameWwid = $false
        foreach ($line in $content) {
            if ($line -eq "Name WWID") {
                $isAfterNameWwid = $true
            } elseif ($isAfterNameWwid -and $uniqueResources -contains ($line -split '\s+')[1]) {
                Write-Host "$line"
            }
        }

        # Поиск затронутых ресурсов для файла
        $NeedresourceInput = ""
        foreach ($line in $content) {
            if ($uniqueResources -contains ($line -split '\s+')[1]) {
                $NeedresourceInput += "$line`r`n"
            }
        }
        if ($uniqueResources.Count -eq 0) {
            Write-Host "Затронутые ресурсы не найдены."
        }

        # Поиск всех ресурсов СХД
        Write-Host "`nВсе ресурсы СХД:"
        $isAfterNameWwid = $false
        $resourceFound = $false
        $ALLresourcesInput = @()
        foreach ($line in $content) {
            if ($line -eq "Name WWID") {
                $isAfterNameWwid = $true
                $resourceFound = $false
            }
            if ($isAfterNameWwid -and $line -match $resourcePattern) {
                $resourceFound = $true
                $ALLresourcesInput += $line
            }
        }

        # Вывод найденных строк, содержащих ресурсы
        if ($resourceFound) {
            $ALLresourcesInput | ForEach-Object { Write-Host $_ }
        } else {
            Write-Host "Нет строк, содержащих ресурсы, после 'Name WWID'."
        }

        # Поиск идентификаторов scsi- в содержимом
        Write-Host "`nВсе диски вывода:"
        foreach ($line in $content) {
            if ($line -match $scsiPattern) {
                $scsiId = $matches[1]
                $scsiIds += $scsiId
            }
        }

        # Поиск строк, соответствующих первому выводу
        foreach ($line in $content) {
            if ($line -match $drivePattern) {
                $firstOutputLines += $line
                Write-Host "Найдена строка диска: $line"
            }
        }

        # Сопоставление данных для терминала
        Write-Host "`nЗатронутые диски:"
        foreach ($scsiId in $scsiIds) {
            $matchingLines = $firstOutputLines | Where-Object { $_ -like "*$scsiId*" }
            if ($matchingLines) {
                Write-Host "Найден диск для SCSI ${scsiId}:"
                $matchingLines | ForEach-Object { Write-Host $_ }
                Write-Host ""
            } else {
                Write-Host "Ненайден диск для SCSI ${scsiId}."
            }
        }

        # Сопоставление данных для файла
        $SHDdiskinSHDInput = ""
        foreach ($scsiId in $scsiIds) {
            foreach ($line in $firstOutputLines) {
                if ($line -like "*$scsiId*") {
                    if ($line -match '^(.*\bslot\s+\d+)\b.*') {
                        $trimmedLine = $matches[1].Trim()  
                    } else {
                        $trimmedLine = $line 
                    }
                    $SHDdiskinSHDInput += "$trimmedLine`r`n"
                }
            }
        }

        $BookmarkMap = @{
            "INC"               = $INC
            "TASK"              = $TASK
            "ADDRESS"           = $addressInput
            "WORK_LEADER"       = $workerInput
            "CONTRACTOR"        = $manufacturerInput
            "WORK_DATE"         = $workDateInput
            "SHDPartNumber"     = $SHDPartNumberInput
            "ALLresources"      = ($ALLresourcesInput -join "`r`n")
            "timework"          = $timeworkInput
            "Needresource"      = $NeedresourceInput.TrimEnd("`r`n")
            "diskinSHD"         = $SHDdiskinSHDInput.TrimEnd("`r`n")
            "numberDisk"        = $numberDiskInput
        }

        # Создание документа Word
        $Word = New-Object -ComObject Word.Application
        $Word.Visible = $true
        $Document = $Word.Documents.Open($templateFile)
        Update-DocumentBookmarks -Document $Document -BookmarkMap $BookmarkMap

        # Сохранение документа ППР
        $SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
        $SaveFileDialog.Filter = "Word Documents (*.docx)|*.docx"
        $SaveFileDialog.DefaultExt = "docx"
        $SaveFileDialog.FileName = "ППР по замене $numberDiskInput на СХД $SHDPartNumberInput $INC $TASK.docx"
        if ($SaveFileDialog.ShowDialog() -eq 'OK') {
            $NewDocumentPath = $SaveFileDialog.FileName
            [void]$Document.SaveAs([ref] $NewDocumentPath)
            [System.Windows.Forms.MessageBox]::Show("Документ сохранен как $NewDocumentPath", "Успешно", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
        }
    })
    $form.Controls.Add($createButton)

    # Кнопка для создания ВК ППР
    $createVkPPRButton = New-Object System.Windows.Forms.Button
    $createVkPPRButton.Location = New-Object System.Drawing.Point(620, 340)
    $createVkPPRButton.Size = New-Object System.Drawing.Size(200, 30)
    $createVkPPRButton.Text = "Составить ВК ППР"
    $createVkPPRButton.Add_Click({
        $diagnosticFile = $diagnosticFileLabel.Text.Split(":")[-1].Trim()
        if (-not $diagnosticFile) {
            [System.Windows.Forms.MessageBox]::Show("Файл диагностики не выбран.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        $vkTemplateFile = $vkTemplateFileLabel.Text.Split(":")[-1].Trim()
        if (-not $vkTemplateFile) {
            [System.Windows.Forms.MessageBox]::Show("Шаблон ВК ППР не выбран.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        # Вставка данных в шаблон ВК ППР
        $BookmarkMapVkPPR = @{
            "ADDRESS"           = $addressInput
            "WORK_LEADER"       = $workerInput
            "CONTRACTOR"        = $manufacturerInput
            "WORK_DATE"         = $workDateInput
            "SHDPartNumber"     = $SHDPartNumberInput
            "ALLresources"      = ($ALLresourcesInput -join "`r`n")
            "NUMBER_DISK"       = $numberDiskInput
            "TIME_WORK"         = $timeworkInput
        }
        
        $Word = New-Object -ComObject Word.Application
        $Word.Visible = $true
        $Document = $Word.Documents.Open($vkTemplateFile)
        Update-DocumentBookmarks -Document $Document -BookmarkMap $BookmarkMapVkPPR

        # Сохранение документа ВК ППР
        $SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
        $SaveFileDialog.Filter = "Word Documents (*.docx)|*.docx"
        $SaveFileDialog.DefaultExt = "docx"
        $SaveFileDialog.FileName = "ВК ППР.docx"
        if ($SaveFileDialog.ShowDialog() -eq 'OK') {
            $NewDocumentPath = $SaveFileDialog.FileName
            [void]$Document.SaveAs([ref] $NewDocumentPath)
            [System.Windows.Forms.MessageBox]::Show("Документ ВК ППР сохранен как $NewDocumentPath", "Успешно", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
        }
    })

    $form.Controls.Add($createVkPPRButton)
    $form.ShowDialog()
}

# Форма для создания ППР по обновлению СХД
function Show-UpdatePPRForm {
    $form = New-Object System.Windows.Forms.Form
    $form.Text = "ППР по обновлению СХД"
    $form.Size = New-Object System.Drawing.Size(800, 600)

    # Текстовое поле для TASK
    $taskLabel = New-Object System.Windows.Forms.Label
    $taskLabel.Location = New-Object System.Drawing.Point(10, 20)
    $taskLabel.Text = "TASK:"
    $form.Controls.Add($taskLabel)

    $taskTextBox = New-Object System.Windows.Forms.TextBox
    $taskTextBox.Location = New-Object System.Drawing.Point(150, 20)
    $taskTextBox.Size = New-Object System.Drawing.Size(200, 20)
    $form.Controls.Add($taskTextBox)

    # Выбор версии обновления с автозаполнением
    $doneUpdateOptions = @("1.0.6-86-hw", "1.0.6-80-hw", "1.0.6-76 HF1", "Свой вариант")
    $doneUpdateLabel = New-Object System.Windows.Forms.Label
    $doneUpdateLabel.Location = New-Object System.Drawing.Point(10, 50)
    $doneUpdateLabel.Text = "Версия обновления:"
    $form.Controls.Add($doneUpdateLabel)

    $doneUpdateComboBox = Create-AutoCompleteComboBox -LocationX 150 -LocationY 50 -Items $doneUpdateOptions -DefaultItem $doneUpdateOptions[0]
    $form.Controls.Add($doneUpdateComboBox)

    # Скрытое текстовое поле для "Свой вариант" (для версии обновления)
    $customUpdateLabel = New-Object System.Windows.Forms.Label
    $customUpdateLabel.Location = New-Object System.Drawing.Point(10, 80)
    $customUpdateLabel.Text = "Введите версию СХД ПО:"
    $customUpdateLabel.Visible = $false
    $form.Controls.Add($customUpdateLabel)

    $customUpdateTextBox = New-Object System.Windows.Forms.TextBox
    $customUpdateTextBox.Location = New-Object System.Drawing.Point(150, 80)
    $customUpdateTextBox.Size = New-Object System.Drawing.Size(200, 20)
    $customUpdateTextBox.Visible = $false
    $form.Controls.Add($customUpdateTextBox)

    # Обработчик изменения выбранного значения в ComboBox
    $doneUpdateComboBox.Add_SelectedIndexChanged({
        if ($doneUpdateComboBox.SelectedItem -eq "Свой вариант") {
            $customUpdateLabel.Visible = $true
            $customUpdateTextBox.Visible = $true
        } else {
            $customUpdateLabel.Visible = $false
            $customUpdateTextBox.Visible = $false
        }
    })

    # Кнопка для выбора файла диагностики
    $diagnosticFileButton = New-Object System.Windows.Forms.Button
    $diagnosticFileButton.Location = New-Object System.Drawing.Point(150, 110)
    $diagnosticFileButton.Size = New-Object System.Drawing.Size(200, 30)
    $diagnosticFileButton.Text = "Загрузите файл с СХД"
    $diagnosticFileButton.Add_Click({
        $filename = Get-FileDialogResult -Filter "Text Files (*.txt)|*.txt|All Files (*.*)|*.*" -Title "Выберите файл диагностики с СХД"
        if ($filename) {
            $diagnosticFileLabel.Text = "Выбранный файл диагностики: $filename"
        }
    })
    $form.Controls.Add($diagnosticFileButton)

    $diagnosticFileLabel = New-Object System.Windows.Forms.Label
    $diagnosticFileLabel.Location = New-Object System.Drawing.Point(150, 150)
    $diagnosticFileLabel.Text = "Выбранный файл диагностики: "
    $form.Controls.Add($diagnosticFileLabel)

    # Кнопка для выбора шаблона ППР
    $templateFileButton = New-Object System.Windows.Forms.Button
    $templateFileButton.Location = New-Object System.Drawing.Point(150, 180)
    $templateFileButton.Size = New-Object System.Drawing.Size(200, 30)
    $templateFileButton.Text = "Загрузите шаблон ППР"
    $templateFileButton.Add_Click({
        $templateFile = Get-FileDialogResult -Filter "Word Documents (*.docx)|*.docx" -Title "Выберите шаблон Word"
        if ($templateFile) {
            $templateFileLabel.Text = "Выбранный шаблон ППР: $templateFile"
        }
    })
    $form.Controls.Add($templateFileButton)

    $templateFileLabel = New-Object System.Windows.Forms.Label
    $templateFileLabel.Location = New-Object System.Drawing.Point(150, 220)
    $templateFileLabel.Text = "Выбранный шаблон ППР: "
    $form.Controls.Add($templateFileLabel)

    # Кнопка для создания ППР
    $createButton = New-Object System.Windows.Forms.Button
    $createButton.Location = New-Object System.Drawing.Point(150, 250)
    $createButton.Size = New-Object System.Drawing.Size(200, 30)
    $createButton.Text = "Составить ППР"
    $createButton.Add_Click({
        $TASK = $taskTextBox.Text.Trim()
        $doneUpdateInput = if ($doneUpdateComboBox.SelectedItem -eq "Свой вариант") { $customUpdateTextBox.Text.Trim() } else { $doneUpdateComboBox.SelectedItem }
        $diagnosticFile = $diagnosticFileLabel.Text.Split(":")[-1].Trim()
        $templateFile = $templateFileLabel.Text.Split(":")[-1].Trim()

        if ([string]::IsNullOrWhiteSpace($TASK)) {
            [System.Windows.Forms.MessageBox]::Show("Поле TASK не может быть пустым.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        if (-not $diagnosticFile) {
            [System.Windows.Forms.MessageBox]::Show("Файл диагностики не выбран.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        if (-not $templateFile) {
            [System.Windows.Forms.MessageBox]::Show("Шаблон ППР не выбран.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        if ($doneUpdateComboBox.SelectedItem -eq "Свой вариант" -and [string]::IsNullOrWhiteSpace($doneUpdateInput)) {
            [System.Windows.Forms.MessageBox]::Show("Значение версии обновления не может быть пустым.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        $content = Get-Content -Path $diagnosticFile
        $SHDPartNumberInput = $content[1].Split()[0]

        if ($content[0] -match 'ver\.(.+)') {
            $LastUpdateInput = $Matches[1]
        } else {
            [System.Windows.Forms.MessageBox]::Show("Строка с версией ПО не соответствует ожидаемому формату.", "Ошибка", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
            return
        }

        $ALLresourcesInput = @()
        $isAfterNameWwid = $false
        foreach ($line in $content) {
            if ($line -eq "Name WWID") {
                $isAfterNameWwid = $true
            }
            if ($isAfterNameWwid -and $line -match '([a-zA-Z0-9]{33})') {
                $ALLresourcesInput += $line
            }
        }

        $BookmarkMap = @{
            "TASK"           = $TASK
            "SHDPartNumber"  = $SHDPartNumberInput
            "SHDPartNumbertwo" = $SHDPartNumberInput
            "ALLresources"   = ($ALLresourcesInput -join "`r`n")
            "Needresource"   = ($ALLresourcesInput -join "`r`n")
            "LastUpdate"     = $LastUpdateInput
            "doneUpdate"     = $doneUpdateInput
        }

        $Word = New-Object -ComObject Word.Application
        $Word.Visible = $true
        $Document = $Word.Documents.Open($templateFile)
        Update-DocumentBookmarks -Document $Document -BookmarkMap $BookmarkMap
        $SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
        $SaveFileDialog.Filter = "Word Documents (*.docx)|*.docx"
        $SaveFileDialog.DefaultExt = "docx"
        $SaveFileDialog.FileName = "ППР по обновлению СХД $SHDPartNumberInput до $doneUpdateInput $TASK.docx"
        if ($SaveFileDialog.ShowDialog() -eq 'OK') {
            $NewDocumentPath = $SaveFileDialog.FileName
            [void]$Document.SaveAs([ref] $NewDocumentPath)
            [System.Windows.Forms.MessageBox]::Show("Документ сохранен как $NewDocumentPath", "Успешно", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
        }
    })
    $form.Controls.Add($createButton)

    $form.ShowDialog()
}

# Функция для выбора файла
function Get-FileDialogResult {
    param (
        [string]$Filter,
        [string]$Title
    )
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.Filter = $Filter
    $OpenFileDialog.Title = $Title
    if ($OpenFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
        return $OpenFileDialog.FileName
    } else {
        return $null
    }
}

# Обновление закладок в документе
function Update-DocumentBookmarks {
    param (
        $Document,
        $BookmarkMap
    )
    foreach ($bookmark in $BookmarkMap.GetEnumerator()) {
        $name = $bookmark.Key
        $content = $bookmark.Value
        if ($Document.Bookmarks.Exists($name)) {
            $range = $Document.Bookmarks.Item($name).Range
            $range.Text = $content
            [void]$Document.Bookmarks.Add($name, $range)
        }
    }
}

# Запуск главного меню
Show-GuiMenu