PowerShell v1.0, очевидно, является административной оболочкой на основе консоли. На самом деле для этого не требуется графический интерфейс. Если он требуется, например, графический интерфейс управления Exchange 2007, он построен на основе PowerShell. Вы можете создать свой собственный графический интерфейс с помощью Windows Forms в сценарии PowerShell. У меня вопрос: «Какие сценарии PowerShell или задачи управления, по вашему мнению, лучше всего подойдут с добавлением даже простого графического интерфейса? Для чего вы создали winforms?»
PowerShell: интерфейс командной строки или графический интерфейс - что вам нужно или что вы предпочитаете?
Ответы (6)
В ответ на предложение монкута, вот простая функция для получения путей к файлам с помощью WindowsForms OpenFileDialog
:
[void] [Reflection.Assembly]::LoadWithPartialName( 'System.Windows.Forms' )
function Select-File( [string]$initialDirectory=$pwd, [switch]$multiselect ) {
$dialog = New-Object Windows.Forms.OpenFileDialog
$dialog.ShowHelp = $true # http://tinyurl.com/6cnmrr
$dialog.InitialDirectory = $initialDirectory
$dialog.Multiselect = $multiselect
if( $dialog.ShowDialog( ) -eq 'OK' ) { $dialog.FileNames }
$dialog.Dispose( )
}
Я также пробовал создать аналогичную функцию Select-Directory
, но FolderBrowserDialog
требование потока STA довольно сложно выполнить в PowerShell v1.
Изменить: благодаря Гордону здесь можно показать обходной путь FolderBrowserDialog
с помощью COM:
function Select-Directory( ) {
$app = New-Object -COM Shell.Application
$directory = $app.BrowseForFolder( 0, "Select Directory", 0 )
$path = $directory.Self.Path
if( $path ) { return $path }
}
Моим любимым старым инструментом графического интерфейса для оболочки командной строки был инструмент выбора каталога, который при запуске из командной строки открывал диалоговое окно выбора каталога графического интерфейса. Очень помогает, когда вам нужно перейти в другой каталог с длинным именем.
Я не смог найти старый exe-инструмент, который использовал, к сожалению. (В любом случае это был pre-powershell) Кроме того, я недостаточно знаком с PowerShell, чтобы понять, как вызвать диалог напрямую из PowerShell и сделать его cmd-let или что-то еще, но вот о чем я говорю с некоторым питоном смешанный.
Вот:
PS D:\> $dir = & "C:\python25\python.exe" "C:\python25\selectdir.pyw"; cd $dir;
# Directory selection dialog opens here, user selects the directory to goto.
PS D:\NewDirectory>
И код Python:
import Tkinter
import tkFileDialog
root = Tkinter.Tk()
root.withdraw()
dirname = tkFileDialog.askdirectory(parent=root)
print dirname
Я хотел бы снова иметь этот инструмент, если кто-нибудь знает, как это исправить, поэтому я могу просто вызвать команду типа "cdir" или что-то в этом роде, прокомментируйте.
Разве это не в основном используется парнями из PowerShell, которые хотят создать красивые сценарии, прежде чем передавать их пользователям или людям, которые ничего не знают о консоли и любят красивые картинки ?!
Я бы перешел на сайт PowerGUI, который, я уверен, вы уже знаете о Джеффе. То, что там делают пользователи, я считаю образцом слияния PowerShell и графического интерфейса. Возможность создавать список объектов, а затем углубляться в иерархическую структуру объектов или запускать сценарии для объекта. В таких вещах я бы увидел сияющий графический интерфейс.
Я надеюсь, что здесь есть несколько примеров, потому что я уверен, что есть множество задач, которые я смог бы делегировать, если бы у них был красивый пользовательский интерфейс и их можно было использовать с помощью мыши.
Но что касается добавления пользовательского интерфейса, я не могу вспомнить место, где его нет. Большинство примеров, которые я могу придумать, либо просто упрощают, либо раскрывают выбранный раздел существующего пользовательского интерфейса. Как правило, они представляют собой просто другое представление о существующих данных, которых нет или которые трудно увидеть в предоставленной консоли управления. Или они расширяют некоторую функциональность с помощью цикла или конвейерной обработки (вы все равно можете использовать мышь, чтобы изменить имена 200 файлов, если хотите). Практически все, что я сделал, что до сих пор используется, - это либо одноразовые сценарии, либо где-то запланированное задание.
Жду идей :)
На самом деле, если подумать об этом, в примерах, которые я видел, в которых используется графический интерфейс, они кажутся несколькими входными интерфейсами, что делается намного проще, чем командная строка с несколькими переключателями, которая может быть довольно длинной и трудной для визуализации.