2009-06-09 57 views
33

我在問,因爲PowerShell讓我困惑。MS通過創建PowerShell解決了什麼問題?

我一直想寫使用PowerShell的部署腳本和我已經小於結果熱情。我有一位喜歡PowerShell的同事,並隨時爲其辯護。所說的同事聲稱PowerShell從未被寫爲強大的外殼,而是寫入:

a)允許您在命令行上查看和抨擊.NET程序集(爲什麼這是PowerShell的原因存在嗎?)

b)爲在自動化.NET應用程序,在KDE類似DCOP主辦和Gnome如何使用CORBA。

c)中被視爲「.NET腳本」,而不是作爲實際殼(與B)。

我一直覺得Windows缺少一個體面的方式來轟炸自動化腳本。在很多情況下,cmd太簡單了,WSH太鈍了(雖然組合可以成功使用,但我不是粉絲)。當我第一次聽說PowerShell的時候,我覺得Windows終於得到了一個體面的外殼,能夠幫助完成許多任務的自動化,但最近的經驗和我的同事告訴我不然。爲了說明問題,我不關心它構建於.NET上,還是它傳遞的是周圍的對象而不是文本(儘管我的Unix背景爲:),我並不認爲PowerShell是無用的,但從我所看到的,它不能解決我希望它能很好解決的問題。只要你走出.NET/Powershell的世界,你的事情就不會再好了。

因此,與所有的出路,什麼問題都MS通過創建PowerShell的解決,或者是一些政治上的私生子,我懷疑?我已經搜索了一些,並沒有爲我提供足夠的答案,但引用越多越好。

+0

你正在用CMD腳本與Powershell創建一個錯誤的二分法,就像中間的JScript和VBScript一樣。 – RedFilter 2009-06-09 00:39:15

+0

這個問題只是尖叫「火焰戰爭」。也很主觀。我想這將很快關閉。 – 2009-06-09 00:43:25

+1

毫無疑問,創建PowerShell的MS背後的原因已被記錄在某處? – Fred 2009-06-09 00:45:47

回答

34

PowerShell實際上構建爲幾件事情:一個成熟和可擴展的自動化平臺和一個現代化的管理外殼。

前者主要用於近期Exchange和其他服務器產品的管理GUI。 GUI僅僅是PowerShell的一個包裝,它背後有很多重要的東西(有些像UNIX GUI程序,作爲命令行程序的包裝)。

傑弗裏Snover(PowerShell的發明者)elaborates a little在PowerShell中是如何創建與目標和問題應該解決。

在我看來,PowerShell作爲一個shell很明顯是作爲cmd的替代品(很容易看到)和Windows Script Host(近幾年Windows Script Host並沒有得到太多關注,儘管它與.NET有着相似的概念。回到當時[一個平臺,多種語言與ActiveScripting],但與.NET微軟基本上把它休息和復活可能不是他們的選擇)。

它統一了Windows管理的大多數方面,您只需要學習一次共同的概念和方法。另外,PowerShell對我來說的威力很大程度上源於它傳遞的對象,這可能解釋了當你離開.NET/PowerShell世界時,只有從命令中獲得String[]纔會遇到問題。但是對於許多你可以在cmd中調用外部程序的東西,有一個cmdlet可以幫你實現。

9

作爲一個開發者,我可以告訴你,我不再有一堆ConsoleApplication42項目文件夾中的周圍鋪設的。

作爲一家小公司的開發人員,我幾乎可以做所有事情(包括數據庫管理員,操縱路由器,從交換機中提取呼叫細節記錄,爲客戶監視和圖形帶寬等等),我可以告訴你PowerShell填補了Windows中一個迫切需要的空白,並且它基於.NET構建的事實提供了一個無縫升級路徑,當PowerShell管道太慢而無法處理數百萬次迭代或需要更持久的強類型實現時。

無論如何,我想問題是如果你沒有迫切的需求,爲什麼要切換到PowerShell?我的意思是現在很好學習它,因爲它基本上是微軟所有事情的新管理界面。但是,如果這不影響你,那麼如果你不認爲自己正在獲得任何東西,就不要打擾。

EDIT(針對下面的評論)

這聽起來像你想使用.NET Process類來啓動一個exe和重定向它的stdout,因此它可以被調用者讀取。我同意這是在.NET中的一種痛苦,但幸運的是,PowerShell爲你做這一切很簡單。至於捕獲結果並將其寫入顯示器,這很簡單,雖然命令不是一個非常知名的命令,因爲它並不常用。這裏有一個例子:

# I always find it easier to use aliases for external commands 
Set-Alias csc C:\Windows\Microsoft.NET\Framework64\v3.5\csc.exe 

# Create some source file 
Set-Content test.cs @" 
class Program { 
    static void Main() { 
     System.Console.WriteLine("Hello World"); 
    } 
} 
"@ 

# Call CSC.EXE 
# the output of csc.exe is written to results.txt and piped 
# to the host (or select-string if you prefer) 
csc test.cs | Tee-Object -file results.txt 

# Check for errors 
if ($LASTEXITCODE) { 
    # this is where community extensions would come in 
    # handy. powershell 2.0 also has a command to send 
    # mail but in 1.0 you can grab one from poshcode.org 
} 
1

恕我直言,主要優勢似乎是一個明智的剪切和粘貼在命令控制檯。

否則我使用ActiveState的ActivePerl在Windows上編寫腳本。它比任何Windows shell腳本都強大得多,並且OLE界面以易於使用的方式公開整個Windows API

相關問題