2010-07-23 134 views
4

如果你是做一个工具:命令行界面或PowerShell?

  1. SYS-管理员会使用(例如,系统监控或备份/恢复工具)
  2. 必须是脚本能够在Windows

会您制作工具:

  1. 命令行界面工具?
  2. PowerShell cmdlet?
  3. 带公共API的GUI工具?

我听说PowerShell在系统管理员中很大,但我不知道与CLI工具相比有多大。

+1

btw,powershell是事实上的CLI工具。 – x0n 2010-07-23 21:45:46

回答

11

PowerShell

使用PowerShell,您可以选择在PowerShell脚本或二进制PowerShell cmdlet中创建可重用命令。 PowerShell 专门为支持输出重定向的命令行界面而设计,并且可以轻松启动EXE并捕获它们的输出。关于PowerShell IMO的最好的部分之一是它为您标准化和处理参数解析。您所要做的就是为您的命令声明参数,PowerShell为您提供参数解析代码,包括对类型化,可选,命名,位置,强制,管道绑定等的支持。例如,以下函数声明在操作中显示:

function foo($Path = $(throw 'Path is required'), $Regex, [switch]$Recurse) 
{ 
} 

# Mandatory 
foo 
Path is required 

# Positional 
foo c:\temp '.*' -recurse 

# Named - note fullname isn't required - just enough to disambiguate 
foo -reg '.*' -p c:\temp -rec 

PowerShell 2.0中的高级功能提供了更多的功能,如参数别名-CN alias for -ComputerName,参数验证了使用[ValidateNotNull()]和文档注释,并帮助如:

<# 
.SYNOPSIS 
    Some synopsis here. 
.DESCRIPTION 
    Some description here. 
.PARAMETER Path 
    The path to the ... 
.PARAMETER LiteralPath 
    Specifies a path to one or more locations. Unlike Path, the value of 
    LiteralPath is used exactly as it is typed. No characters are interpreted 
    as wildcards. If the path includes escape characters, enclose it in single 
    quotation marks. Single quotation marks tell Windows PowerShell not to 
    interpret any characters as escape sequences. 
.EXAMPLE 
    C:\PS> dir | AdvFuncToProcessPaths 
    Description of the example 
.NOTES 
    Author: Keith Hill 
    Date: June 28, 2010  
#> 
function AdvFuncToProcessPaths 
{ 
    [CmdletBinding(DefaultParameterSetName="Path")] 
    param(
     [Parameter(Mandatory=$true, Position=0, ParameterSetName="Path", 
        ValueFromPipeline=$true, 
        ValueFromPipelineByPropertyName=$true, 
        HelpMessage="Path to bitmap file")] 
     [ValidateNotNullOrEmpty()] 
     [string[]] 
     $Path, 

     [Alias("PSPath")] 
     [Parameter(Mandatory=$true, Position=0, ParameterSetName="LiteralPath", 
        ValueFromPipelineByPropertyName=$true, 
        HelpMessage="Path to bitmap file")] 
     [ValidateNotNullOrEmpty()] 
     [string[]] 
     $LiteralPath 
    ) 
    ... 
} 

查看属性是如何给你更细粒度的控制OV呃PowerShell的参数解析引擎。还要注意,可以用于两种用途的文档的意见和帮助,像这样:

AdvFuncToProcessPaths -? 
man AdvFuncToProcessPaths -full 

这个真的很强大,我停笔我自己的小C#程序的EXE的主要原因之一。解析出的参数是80%的代码。

+2

如果Windows是目标,我真的不认为有比PowerShell更好的选择。就我个人而言,我认为它最大的优势在于它使远程处理变得多么容易。我讨厌远程控制,因为根据我的经验,在开始之前总是有一个过程需要执行,这只是需要时间。现在使用PowerShell,你所要做的就是'Enable-PSRemoting',你很好。 – 2010-07-23 15:24:09

+0

是的,有很多*喜欢关于PowerShell,包括远程处理,但我的答案已经越来越长。 :-) – 2010-07-23 15:42:45

-1

Python

非常适合命令行应用程序和系统管理。比大多数shell更容易编码。而且,运行速度比大多数炮弹都快。

+0

是的,但未与ms软件集成(或易于集成)。 – x0n 2010-07-23 21:13:25

+0

@ x0n:什么?你有这方面的细节吗?这对我和整个IronPython社区来说都是新闻。 – 2010-07-23 21:33:34

+0

hmm;我认为你的膝盖混蛋答案。我不是说语法上的powershell是一个更好的语言(事实并非如此),但换句话说:微软的通用工程标准(CEC)是否规定所有的微软产品都必须支持语言绑定和/或对Ironpython的集成支持?不是。它适用于PowerShell。 – x0n 2010-07-23 21:39:26

0

我总是首先创建一个命令行工具:

  • 要容易得多自动/纳入脚本不是一个GUI
  • 它将运行在相当多(比产生API的工作要少得多)所有的Windows机器(包括没有安装Power Shell的旧机器)

虽然power shell是系统管理员的一个很好的工具,但我还不认为它是广泛传播的,足以避免产生传统命令行工具 - 因此我总是先制作一个命令行工具(尽管我也可能选择制作一个PowerShell cmdlet)。同样,虽然一个经过深思熟虑的API可能更容易编写脚本,但您的API会限制用户可以编写脚本的语言,所以最好另外提供一个命令行工具作为后备/轻松替代。