Как получить имя файла из PowerShell GUI - PullRequest
2 голосов
/ 09 марта 2020

Я создаю программу для изменения различных значков с помощью RegEdit, и я подумал, что GUI, где люди могут выбрать, какие файлы .ico они хотели бы изменить в своем файле, было бы хорошим прикосновением. Единственное, я ничего не знаю о PowerShell, но манипулировать RegEdit было намного проще, чем с Python. И я знаю меньше о PowerShell GUI.

Add-Type -AssemblyName System.Windows.Forms
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ 
    InitialDirectory = [Environment]::GetFolderPath('Desktop') 
    Filter = 'Icons (*.ico)|*.ico'
}
$result = $FileBrowser.ShowDialog()
<#What do here?#>

Последняя строка, где есть комментарий, что мне нужно сделать, чтобы получить строку или любой другой тип данных, который содержит имя файла, которое я только что искал за? Для любого любопытного, что $FileBrowser просто дает окно поиска файла по умолчанию Windows, на которое я только что установил ограничение .ico. Какой метод я вызываю? Я читал кое-что о DialogResult, но не понимаю, как этот метод или апплет связывается с ShowDialog, и как он используется для получения имени файла (если это правильное решение)

Ответы [ 2 ]

2 голосов
/ 09 марта 2020
  • $FileBrowser.ShowDialog() возвращает значение перечисления, которое указывает, подтвердил ли пользователь (OK) или отменил (Cancel) диалог.

  • Если подтвердил пользователь, $FileBrowser.FileName содержит полный путь к выбранному файлу.

Add-Type -AssemblyName System.Windows.Forms

$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ 
    InitialDirectory = [Environment]::GetFolderPath('Desktop') 
    Filter = 'Icons (*.ico)|*.ico'
}

if ('OK' -eq $FileBrowser.ShowDialog()) {
  "User chose: $($FileBrowser.FileName)"
}
else {
  'User canceled the dialog.'
}

Примечание. Вместо PowerShell можно использовать строки вместо PowerShell. значений перечисления, которые PowerShell автоматически преобразует; Вы также можете явно использовать значения перечисления, но это более многословно; например, 'OK' против [System.Windows.Forms.DialogResult]::OK.


Что касается обнаружения задействованных типов и их членов s:

  • Вы можете использовать командлет Get-Member для переменной, чтобы определить тип значения. NET и члены этого типа.

  • Для получения дополнительной информации о данного типа. NET, вы можете просто Google Google или создать и открыть URL программно следующим образом:

$result = $FileBrowser.ShowDialog()

# Get the full name of the type of the value stored in $result
$fullTypeName = $result.GetType().FullName

# Assuming the type is one that comes with .NET,
# look up its documentation online (using the default browser).
Start-Process "https://docs.microsoft.com/en-us/dotnet/api/$fullTypeName"

Этот ответ содержит вспомогательная функция с именем Show-TypeHelp, заключающая в себе все вышеперечисленное.

0 голосов
/ 09 марта 2020

$Result | Get-Member

Это покажет вам путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...