概述 1. 微軟Windows作業系統最初的設計目標是面向非技術使用者, 甚至是對計算機不感興趣的人群, 因此, 真正自動化, 強大的Shell一直不是微軟公司所關心的問題. 隨著Windows開拓市場, 使用者的反饋等, 微軟意識到, 透過圖形化工具管理一臺計算機或許是最完美的手段, 但是隨著需要管理的計算機數量提升, 就必須依靠能夠有效自動化計算機配置的工具, 這是開發PowerShell的一個重要原因. 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完全一致.
概述 1. 微軟Windows作業系統最初的設計目標是面向非技術使用者, 甚至是對計算機不感興趣的人群, 因此, 真正自動化, 強大的Shell一直不是微軟公司所關心的問題. 隨著Windows開拓市場, 使用者的反饋等, 微軟意識到, 透過圖形化工具管理一臺計算機或許是最完美的手段, 但是隨著需要管理的計算機數量提升, 就必須依靠能夠有效自動化計算機配置的工具, 這是開發PowerShell的一個重要原因. 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完全一致.