2. 為什麽不使用已有的shell或擴展cmd.exe呢? 我們熟知的bash, ksh是為unix, linux系統設計的, 優化的shell, 從這些操作系統內核提供的system call來看, shell將內核的特性真正表現出來. 但是, Windows操作系統和unix, linux是完全不同的, Windows將大部分管理通過面向對象的方式進行管理, 提供了諸如COM, WMI等概念. 傳統的shell輸出信息都是字符串, 這樣有利於統壹的處理, 但是字符串也是妳唯壹能夠操作的對象. PowerShell開發隊伍為了能夠為Windows提供更好的優化, 因此選擇了重新創建壹門新的語言.
3. PowerShell最初的藍本是Posix的shell標準, 並借鑒了大量的Perl語言中精華, 提供了壹個基於對象的腳本環境. PowerShell v1(版本1.0)希望使用者與對象交互, 但沒有真正提供面向對象創建的語法(但是, 借助PowerShell的機制, 可以自己實現這套語法). 並且大量特性與C#語言相同, 因此C#到PowerShell的轉換是非常容易的.
4. PowerShell有壹些核心的特性, 這些特性是比較復雜的, 他們的存在是為了讓傳統shell用戶能夠盡量獲得相似的用戶體驗. 對於普通用戶, 妳不需要理解, 掌握這些復雜的特性, 但是對於想深入理解, 掌握PowerShell的朋友, 這些特性對妳將會產生巨大的幫助.
綜上所述, 如果妳用bash, perl, .Net, WMI, COM, VBscript的相關知識, 那麽學習PowerShell的過程就會更短. 但是對於掌握bash, ksh的用戶, 最困難的步驟是對問題的處理方式, 思維方式轉變. 因為PowerShell中不僅僅有字符串, 因此, 嘗試使用更加豐富的手段去處理問題, 往往阻撓大家的前進, 不過只要妳有信心, 那麽妳壹定能克服這些不是困難的困難. 祝大家在學習PowerShell的過程中, 能夠舉壹反三, 從軟件工程等多種角度, 更好的理解計算機科學.
下面, 簡單的貼出簡單的語法及解釋.
PS C:\> 5 + 100
105
在PowerShell中, 進行數學運算相當的簡單, 將需要計算的表達式輸入, 結果就會輸出, 這裏根本不需要什麽打印語句, 執行的結果不會被丟棄掉, 而是將結果輸出(以後, 我們會看到如何將結果丟棄).
PS C:\> "hello world!"
hello world!
學習任何語言, 第壹個代碼總會是hello world, 和上面的數學計算壹樣, 直接輸入即可.
PS C:\> (5 + 23 * 2) / 23
2.21739130434783
對於, 四則混合運算, PowerShell也支持的很好, 能夠使用()來修改運算符的優先級和結合性. 這裏註意, PowerShell支持幾種不同的數據類型, 如: int, float, double等. 大多數時候, 我們會在後面對類型轉換等做壹些介紹.
PS C:\> (2+2)*3/7 > c:\foo.txt
PS C:\> type c:\foo.txt
1.71428571428571
除了將運算結果輸出到顯示器, 我們可以將結果存儲到臨時文件, 然後用type命令將文件的結果取回. 怎麽樣? 是不是和shell很相似呢?
PS C:\> $n = (2+2)*3
PS C:\> $n
12
PS C:\> $n / 7
1.71428571428571
除了將運算結果存儲到文件, 我們可以通過變量賦值, 將運算結果存儲到變量中, 並使用該變量進行後續的計算.
PS C:\> $files = dir
PS C:\> $files[3]
Directory: Microsoft.PowerShell.Core\FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 2007-7-26 21:25 Program Files
PowerShell是壹個支持對象的語言, 我們可以簡單的將命令返回的結果賦值給變量, $files中包含了但前目錄下的目錄項的對象集合, 使用普通數組訪問語法, 就可以獲得該該位置的對象. 例子中顯示了Program Files目錄. 註意PowerShell中的數組下標是從0開始的. 這點與.Net Common Language Runtime完全壹致.