2010-07-23 132 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會限制用戶可以編寫腳本的語言,所以最好另外提供一個命令行工具作爲後備/輕鬆替代。