Add-Type -AssemblyName System.Windows.Forms

function ShowMenu {
    Write-Host ""  # Разделяет предыдущий вывод и новое меню
    Write-Host "Меню:"
    Write-Host "1. Добавить файл"
    Write-Host "2. Закрыть скрипт"
    $choice = Read-Host "Выберите вариант"
    return $choice
}

function ProcessFile {
    # Создаем диалог выбора файла
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"
    $OpenFileDialog.Title = "Выберите текстовый файл"

    # Показываем диалоговое окно и проверяем, выбрал ли пользователь файл
    if ($OpenFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
        $filename = $OpenFileDialog.FileName
        Write-Host "Загруженный файл: $filename"  # Выводим имя загруженного файла

        $content = Get-Content -Path $filename

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

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

        # Счетчик найденных дисков
        $counter = 0

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

            if ($line -match $uuidPattern) {
                $shortUuid = $matches[1]
                Write-Host ""  # Пустая строка перед новым UUID

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

                Write-Host "Найден UUID: $shortUuid"

                # Извлечение ресурса
                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

        # Поиск и вывод строк, содержащих ресурсы после "Name WWID"
        Write-Host "`nЗатронутые ресурсы после 'Name WWID':"
        $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"
            }
        }
    } else {
        Write-Host "Файл не был выбран."
    }
}

# Основной цикл
while ($true) {
    $choice = ShowMenu
    switch ($choice) {
        1 { ProcessFile }
        2 { break }  
        default { Write-Host "Неверный выбор. Пожалуйста, выберите 1 или 2." }
    }
}

Write-Host "Скрипт завершён. Нажмите Enter, чтобы закрыть."
Read-Host
Write-Host "1. Добавить файл"
Write-Host "2. Закрыть скрипт"
$choice = Read-Host "Выберите вариант"
А если я не хочу нажимать enter после ввода цифра, а сразу отрабатывать должно