Как создать окно выбора файлов в графическом интерфейсе PowerShell?

Добрый день! Я решил заняться созданием GUI для автоматизации рутинных задач, таких как экспорт почтовых ящиков в PST и удаление сообщений за определённый период. У меня уже есть некоторые разработки, но я не знаю, как реализовать окно для выбора пути файла, чтобы указать место сохранения PST-файла. Есть ли возможность сделать это в PowerShell и как правильно вызвать такой элемент? Например, я использую код для создания выпадающего списка: <br/> $cmbAccountsWithoutMailbox = New-Object System.Windows.Forms.ComboBox <br/> .. <br/> $cmbAccountsWithoutMailbox.DataBindings.DefaultDataSourceUpdateMode = 0 <br/> $cmbAccountsWithoutMailbox.DropDownStyle = 1 <br/> .. <br/> $cmbAccountsWithoutMailbox.FormattingEnabled = $True <br/> $cmbAccountsWithoutMailbox.Location = $System_Drawing_Point <br/> $cmbAccountsWithoutMailbox.Name = "cmbAccountsWithoutMailbox" <br/> .. <br/> $cmbAccountsWithoutMailbox.TabIndex = 15 <br/> $frmMain.Controls.Add($cmbAccountsWithoutMailbox) <br/> Заранее благодарен за вашу помощь.
  • 7 февраля 2025 г. 13:54
Ответы на вопрос 2
Добрый день!

В PowerShell вы можете использовать класс `OpenFileDialog` или `SaveFileDialog` из пространства имен `System.Windows.Forms` для создания окна выбора файлов. В вашем случае, поскольку вы хотите указать место сохранения PST-файла, вам понадобится использовать `SaveFileDialog`. Вот пример кода, который показывает, как вызвать окно выбора файла и получить выбранный путь:

```powershell
# Загружаем необходимые сборки
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# Создаем форму
$form = New-Object System.Windows.Forms.Form
$form.Text = "Выбор файла для сохранения"
$form.Size = New-Object System.Drawing.Size(400, 300)

# Создаем кнопку для открытия диалога сохранения
$btnSave = New-Object System.Windows.Forms.Button
$btnSave.Text = "Сохранить как..."
$btnSave.Location = New-Object System.Drawing.Point(150, 100)
$form.Controls.Add($btnSave)

# Обработка нажатия на кнопку
$btnSave.Add_Click({
    $saveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
    $saveFileDialog.Filter = "PST files (*.pst)|*.pst|All files (*.*)|*.*"
    $saveFileDialog.Title = "Выберите место для сохранения PST-файла"

    # Если пользователь нажал OK в диалоге
    if ($saveFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
        $selectedPath = $saveFileDialog.FileName
        [System.Windows.Forms.MessageBox]::Show("Выбранный путь: $selectedPath", "Информация", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
        
        # Здесь вы можете добавить код для работы с выбранным путем
    }
})

# Отображаем форму
$form.Add_Shown({$form.Activate()})
[void] $form.ShowDialog()
```

### Объяснение кода:
1. **Загрузка необходимых сборок**: Здесь вы загружаете `System.Windows.Forms` и `System.Drawing`, чтобы использовать GUI-элементы.
   
2. **Создание формы**: Создается основная форма, на которой будет размещена кнопка.

3. **Создание кнопки**: Создается кнопка "Сохранить как...", по нажатию на которую открывается диалоговое окно выбора файла.

4. **Обработка нажатия на кнопку**: При нажатии на кнопку создается экземпляр `SaveFileDialog`, к которому можно установить фильтры для типов файлов (в данном случае только для файлов PST). После того, как пользователь выберет файл и нажмет "OK", путь к файлу сохраняется в переменной `$selectedPath` и показывается в сообщении.

5. **Отображение формы**: Форма отображается в диалоговом режиме.

С помощью этого кода вы сможете реализовать выбор пути для сохранения PST-файла в своем графическом интерфейсе PowerShell.
Логично, что System.Windows.Forms.SaveFileDialog 
Add-Type -AssemblyName System.Windows.Forms

# Создание диалогового окна сохранения файла
$saveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
$saveFileDialog.InitialDirectory = [System.Environment]::GetFolderPath('Desktop') # Стартовый каталог
$saveFileDialog.Filter = "Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*" # Фильтр типов файлов
$saveFileDialog.Title = "Выберите место для сохранения файла"
$saveFileDialog.DefaultExt = "txt" # Расширение по умолчанию

# Отображение диалога и обработка результата
if ($saveFileDialog.ShowDialog() -eq "OK") {
    $savePath = $saveFileDialog.FileName
    Write-Host "Файл будет сохранен по пути: $savePath"
} else {
    Write-Host "Сохранение отменено пользователем."
}
Похожие вопросы