PowerShell: интерфейс командной строки или графический интерфейс - что вам нужно или что вы предпочитаете?

PowerShell v1.0, очевидно, является административной оболочкой на основе консоли. На самом деле для этого не требуется графический интерфейс. Если он требуется, например, графический интерфейс управления Exchange 2007, он построен на основе PowerShell. Вы можете создать свой собственный графический интерфейс с помощью Windows Forms в сценарии PowerShell. У меня вопрос: «Какие сценарии PowerShell или задачи управления, по вашему мнению, лучше всего подойдут с добавлением даже простого графического интерфейса? Для чего вы создали winforms?»


person Jeffery Hicks    schedule 08.10.2008    source источник


Ответы (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 }
}
person Emperor XLII    schedule 19.10.2008

Моим любимым старым инструментом графического интерфейса для оболочки командной строки был инструмент выбора каталога, который при запуске из командной строки открывал диалоговое окно выбора каталога графического интерфейса. Очень помогает, когда вам нужно перейти в другой каталог с длинным именем.

Я не смог найти старый 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" или что-то в этом роде, прокомментируйте.

person monkut    schedule 09.10.2008

Разве это не в основном используется парнями из PowerShell, которые хотят создать красивые сценарии, прежде чем передавать их пользователям или людям, которые ничего не знают о консоли и любят красивые картинки ?!

person Community    schedule 08.10.2008
comment
Не знаю, зашел бы я так далеко, иногда вам нужен графический интерфейс. Мне любопытно, какие могут быть эти ситуации в PowerShell. - person Jeffery Hicks; 08.10.2008

Я бы перешел на сайт PowerGUI, который, я уверен, вы уже знаете о Джеффе. То, что там делают пользователи, я считаю образцом слияния PowerShell и графического интерфейса. Возможность создавать список объектов, а затем углубляться в иерархическую структуру объектов или запускать сценарии для объекта. В таких вещах я бы увидел сияющий графический интерфейс.

person EBGreen    schedule 08.10.2008
comment
PowerGUI, безусловно, выводит это на новый уровень. Я все еще надеюсь узнать, какие автономные решения PoweShell придумали люди, для которых требуется графический интерфейс, или в каких ситуациях. - person Jeffery Hicks; 08.10.2008

Я надеюсь, что здесь есть несколько примеров, потому что я уверен, что есть множество задач, которые я смог бы делегировать, если бы у них был красивый пользовательский интерфейс и их можно было использовать с помощью мыши.

Но что касается добавления пользовательского интерфейса, я не могу вспомнить место, где его нет. Большинство примеров, которые я могу придумать, либо просто упрощают, либо раскрывают выбранный раздел существующего пользовательского интерфейса. Как правило, они представляют собой просто другое представление о существующих данных, которых нет или которые трудно увидеть в предоставленной консоли управления. Или они расширяют некоторую функциональность с помощью цикла или конвейерной обработки (вы все равно можете использовать мышь, чтобы изменить имена 200 файлов, если хотите). Практически все, что я сделал, что до сих пор используется, - это либо одноразовые сценарии, либо где-то запланированное задание.

Жду идей :)

person slipsec    schedule 09.10.2008

На самом деле, если подумать об этом, в примерах, которые я видел, в которых используется графический интерфейс, они кажутся несколькими входными интерфейсами, что делается намного проще, чем командная строка с несколькими переключателями, которая может быть довольно длинной и трудной для визуализации.

person Community    schedule 09.10.2008