PowerShell:CLI或GUI-您需要或更喜欢它们



PowerShell v1.0显然是一个基于控制台的管理shell。它实际上并不需要GUI界面。如果需要一个,如Exchange2007管理GUI,它是在PowerShell之上构建的。您可以在PowerShell脚本中使用Windows窗体创建自己的GUI。我的问题是,"你认为哪种PowerShell脚本或管理任务最好添加一个简单的图形界面?你创建了什么winforms来完成?"

根据monkut的建议,这里有一个简单的函数可以使用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中很难实现。


编辑:感谢Gordon,这里有一个使用COM:显示FolderBrowserDialog的变通方法

function Select-Directory( ) {
  $app = New-Object -COM Shell.Application
  $directory = $app.BrowseForFolder( 0, "Select Directory", 0 )
  $path = $directory.Self.Path
  if( $path ) { return $path }
}

我最喜欢的命令行shell的旧gui工具是一个选择目录工具,当从命令行执行时,会打开gui目录选择对话框。当你必须cd到其他路径名很长的目录时,非常有帮助。

我找不到以前使用的旧exe工具。(无论如何,这是powershell之前的版本)此外,我对powershell还不够熟悉,不知道如何直接从powershell调用对话框,并使其成为cmdlet或其他什么,但以下是我所说的混合了一些python的内容。

这是:

PS D:> $dir = & "C:python25python.exe" "C:python25selectdir.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网站,我相信你已经知道Jeff了。用户在那里所做的事情我认为是powershell和GUI融合的典范。生成对象列表的能力,然后深入到对象的层次结构中,或者在对象上运行脚本。在这种情况下,我会看到GUI界面大放异彩。

我对这里的一些例子充满希望,因为我相信如果有一个漂亮的UI并且可以与鼠标一起使用,我可以委托很多任务。

但就添加用户界面而言,我很难想到一个没有用户界面的地方。我能想到的大多数例子要么只是简化,要么是公开现有UI的选定部分。它们通常只是不存在的现有数据的不同视图,或者在提供的管理控制台中很难看到。或者,它们通过循环或流水线扩展了一些功能(如果需要,您仍然可以使用鼠标更改200个文件的名称)。我所做的几乎所有仍在使用的事情要么是一次性脚本,要么是作为预定任务坐在某个地方。

我正在等待想法:)

实际上,仔细想想,在我看到的使用GUI的示例中,它们似乎是多个输入前端,这比带有几个开关的命令行要容易得多,因为这些开关可能很长,很难可视化。

相关内容