Powershell學(xué)習(xí)筆記——Powershell控制臺(tái)和腳本文件

2018-06-09 09:56 更新

安裝Powershell

  如果是Windows 7,那么Powershell 2.0已經(jīng)預(yù)裝了。不過(guò)Windows XP就沒(méi)那么幸運(yùn)了,需要自己安裝Powershell。Windows XP的Powershell 2.0集成在Windows Management Framework Core中,下載地址有點(diǎn)長(zhǎng),在這里:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=60cb5b6c-6532-45e0-ab0f-a94ae9ababf5#QuickDetails。如果搜索的話,就搜KB968930。

  如果想知道是否已經(jīng)安裝了Powershell,有個(gè)很簡(jiǎn)單的辦法:用[Win+R]打開(kāi)“運(yùn)行”窗口,輸入“powershell”,回車。如果打開(kāi)了Powershell控制臺(tái),那就是已經(jīng)安裝了Powershell啦。如果想查看Powershell的版本,有好幾種辦法,比如

  1. PS F:\> $Host.Version.ToString() 
  2. 2.0 
  3. PS F:\> $PSVersionTable 
  4.  
  5. Name                           Value 
  6. ----                           ----- 
  7. CLRVersion                     2.0.50727.4961 
  8. BuildVersion                   6.1.7600.16385 
  9. PSVersion                      2.0 
  10. WSManStackVersion              2.0 
  11. PSCompatibleVersions           {1.0, 2.0} 
  12. SerializationVersion           1.1.0.1 
  13. PSRemotingProtocolVersion      2.1 
  14.  
  15.  
  16. PS F:\> Get-Host 
  17.  
  18.  
  19. Name             : ConsoleHost 
  20. Version          : 2.0 
  21. InstanceId       : 6632b7de-43d1-4ad1-8fcf-f632bdbd8387 
  22. UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface 
  23. CurrentCulture   : zh-CN 
  24. CurrentUICulture : zh-CN 
  25. PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy 
  26. IsRunspacePushed : False 
  27. Runspace         : System.Management.Automation.Runspaces.LocalRunspace 
  28.  
  29.  
  30.  
  31. PS F:\> 

設(shè)置Powershell控制臺(tái)

  從開(kāi)始菜單啟動(dòng)“Windows Powershell”,或者通過(guò)“運(yùn)行→powershell”打開(kāi)的就是Powershell的控制臺(tái)窗口。默認(rèn)的控制臺(tái)是80字符x25字符大小,黑底白字的窗口,不過(guò)這些都可以自定義。

  和CMD控制臺(tái)窗口一樣,右鍵單擊Powershell控制臺(tái)窗口的頂部標(biāo)題欄位置,在彈出的菜單中選擇“屬性”,即可打開(kāi)控制臺(tái)窗口的屬性對(duì)話框。這個(gè)對(duì)話框有4個(gè)標(biāo)簽頁(yè):“選項(xiàng)”、“字體”、“布局”、“顏色”。

√ 選項(xiàng) - 這里最有用的設(shè)置就是“快速編輯模式”。如果勾選了這個(gè)選項(xiàng),那么在控制臺(tái)窗口中進(jìn)行文字的選擇、拷貝和粘貼就會(huì)非常方便:直接在控制臺(tái)窗口中拖動(dòng)鼠標(biāo),矩形選區(qū)內(nèi)的內(nèi)容就被選中了;再單擊鼠標(biāo)右鍵,選中的內(nèi)容就被放入了Windows剪貼板,同時(shí)選區(qū)被取消。當(dāng)剪貼板內(nèi)有文本內(nèi)容的時(shí)候(不管是從控制臺(tái)拷貝的還是從其它地方拷貝的),在控制臺(tái)窗口內(nèi),無(wú)選區(qū)的狀態(tài)下,單擊右鍵,則剪貼板中的內(nèi)容就被粘貼出來(lái)了——這一切都很方便。但是,如果不勾選“快速編輯模式”,那么上述操作都需要通過(guò)右鍵菜單來(lái)進(jìn)行,操作比較繁瑣。順便提一下,在快速編輯模式下,右鍵直接是復(fù)制/粘貼操作,不會(huì)彈出右鍵菜單,那需要編輯上下文菜單的時(shí)候,就要在窗口標(biāo)題欄位置單擊鼠標(biāo)右鍵,并在彈出菜單的“編輯”子菜單中去找需要的編輯命令啦。
√ 字體 - 就是在非常有限的字體列表里選擇一個(gè)順眼的,再挑個(gè)合適的大小就行啦。
√ 布局 - 這里需要設(shè)置兩個(gè)寬度和高度,它們都是以字符為單位而不是以像素為單位的?!按翱诖笮 崩镌O(shè)置的寬度和高度直接影響控制臺(tái)窗口顯示的大??;而“屏幕緩沖區(qū)大小”則用于設(shè)置文本緩存區(qū)的矩形區(qū)域大小。緩沖區(qū)大小不能小于窗口大小。如果緩沖區(qū)大小大于窗口大小,則在窗口上會(huì)出現(xiàn)滾動(dòng)條,通過(guò)拖動(dòng)滾動(dòng)條來(lái)查看緩沖區(qū)在當(dāng)前窗口以外的內(nèi)容。一般情況下,窗口寬度和緩沖我寬度設(shè)置為同樣的值,但可以將緩沖區(qū)的高度設(shè)置得大一些,比如3000、6000、或者9999——內(nèi)存不是問(wèn)題,但更高的緩沖區(qū)意味著可以看到更多的歷史信息。
√ 顏色 - 如果不喜歡黑底白字,那在這里就可以改變啦。比如,可以將“屏幕背景”設(shè)置為白色,將“屏幕文字”設(shè)置為深灰色。這樣控制臺(tái)窗口就變成白底黑字啦——應(yīng)該是灰字,相比黑色字體,灰色字體沒(méi)那么刺眼一些。

  設(shè)置完并“確定”之后,設(shè)置的內(nèi)容被保存,同時(shí)窗口會(huì)根據(jù)設(shè)置立即改變。關(guān)閉控制臺(tái)窗口之后,下次以同樣的方式打開(kāi)Powershell控制臺(tái)窗口,那么這些設(shè)置都會(huì)自動(dòng)加載并應(yīng)用。

  為什么要說(shuō)“同樣的方式打開(kāi)”?如果常用CMD的話,這原因是一樣的,所以這些設(shè)置的保存都與Powershell的快捷方式有關(guān)。不用知道Windows是通過(guò)什么樣的方式讓設(shè)置與快捷方式相關(guān)的,但效果就是,通過(guò)不同的快捷方式打開(kāi)的Powershell控制臺(tái),應(yīng)用的是不同的設(shè)置。比如,通過(guò)開(kāi)始菜單打開(kāi)的Powershell和通過(guò)“運(yùn)行”窗口打開(kāi)的Powershell,兩個(gè)控制臺(tái)窗口的設(shè)置就是不同的。

Powershell控制臺(tái)的快捷鍵

  Powershell控制臺(tái)的快捷鍵和CMD控制臺(tái)的快捷鍵一樣,常用的有如下一些:

← →
左右移動(dòng)光標(biāo)
↑ ↓
在命令歷史中滾動(dòng)選擇歷史中的命令,便于重復(fù)執(zhí)行命令,當(dāng)然也可以先修改再執(zhí)行
Home
將光標(biāo)移動(dòng)到當(dāng)前命令的第1個(gè)字符位置
End
將光標(biāo)移動(dòng)到當(dāng)前命令的最后1個(gè)字符之后
Ctrl+Home
從當(dāng)前位置開(kāi)始,清除當(dāng)前命令中前面所有字符
Ctrl+End
從當(dāng)前位置開(kāi)始,清除當(dāng)前命令中后面所有字符
Backspace
向前刪除1個(gè)字符
Del
向后刪除1個(gè)字符
Esc
清除當(dāng)前已經(jīng)輸入的命令
F3
顯示上次執(zhí)行的命令。如果通過(guò)↑和↓鍵選擇了歷史命令,并通過(guò)Esc、Backspace、Del清除或刪除了部分內(nèi)容,則F3可以恢復(fù)顯示這條歷史命令。如果按F3之前輸入了部分內(nèi)容,那F3顯示的歷史命令中相應(yīng)的位置由輸入的字符替代。(這個(gè)說(shuō)起來(lái)很麻煩,自己試試就知道了)
Tab
輸入命令時(shí)補(bǔ)全命令、文件,或者對(duì)象成員

Powershell腳本文件

  Powershell腳本文件是以.ps1作為擴(kuò)展名的。曾經(jīng)以為.ps1是Powershell 1.0的腳本文件擴(kuò)展名,而Powershell 2.0的腳本文件擴(kuò)展名是.ps2,但經(jīng)過(guò)試驗(yàn),Powershell目前不管哪個(gè)版本,都不認(rèn).ps2這個(gè)擴(kuò)展名。

  Powershell只認(rèn)識(shí)ANSI編碼(在簡(jiǎn)體中文Windows下就是GBK)的腳本文件。如果你把腳本文件用UTF-8格式保存,而腳本中又正好有中文的話,Powershell在執(zhí)行腳本的時(shí)候會(huì)將中文都顯示成亂碼,偶爾還會(huì)報(bào)告語(yǔ)法錯(cuò)誤。

  示例說(shuō)話,先來(lái)個(gè)Hello World:

  1. #hello.ps1 
  2. "Hello World" 

  腳本中的第1句注釋不是必須的——對(duì)了,Powershell腳本使用#號(hào)來(lái)標(biāo)記行注釋,#可以出現(xiàn)在一行的行首,也可以是其它位置,總之,一行內(nèi)在它之后的內(nèi)容都被認(rèn)為是注釋內(nèi)容了——回頭來(lái)說(shuō),這個(gè)腳本只干了一件事情,就是輸出Hello World。

  是不是有點(diǎn)疑惑,因?yàn)檫@里沒(méi)有看到任何一個(gè)命令。是的,Powershell就是這么神奇,常量值、變量值或者通過(guò)表達(dá)式運(yùn)行出來(lái)的值,可以直接輸出到控制臺(tái)。所以Powershell可以用作計(jì)算器,比如,在控制臺(tái)中輸入命令:

  1. PS F:\>1 + 3 * 4 # 這將會(huì)直接輸出運(yùn)算結(jié)果13 
  2. 13 

  扯遠(yuǎn)了?,F(xiàn)在回過(guò)頭來(lái)運(yùn)行hello.ps1,不過(guò)很遺憾,如果你是第一次執(zhí)行Powershell腳本,那么有可能會(huì)得到一個(gè)錯(cuò)誤消息:

  1. PS F:\> .\hello.ps1 
  2. 無(wú)法加載文件 F:\hello.ps1,因?yàn)樵诖讼到y(tǒng)中禁止執(zhí)行腳本。有關(guān)詳細(xì)信息,請(qǐng)參閱 "get-help about_signing"。 
  3. 所在位置 行:1 字符: 12 
  4. + .\hello.ps1 <<<< 
  5.     + CategoryInfo          : NotSpecified: (:) [], PSSecurityException 
  6.     + FullyQualifiedErrorId : RuntimeException 

  錯(cuò)誤報(bào)告說(shuō)系統(tǒng)禁止執(zhí)行腳本——因?yàn)镻owershell的執(zhí)行策略阻止了這個(gè)被它認(rèn)為不安全的腳本運(yùn)行。

  Powershell的執(zhí)行策略有4個(gè):

  1. Restricted(受限),這個(gè)策略完全不允許任何腳本執(zhí)行;
  2. AllSigned(所有已簽名),這個(gè)策略允許通過(guò)受信任的數(shù)字簽名的腳本執(zhí)行;
  3. RemoteSigned(遠(yuǎn)程下載需簽名),這個(gè)策略不限制本地創(chuàng)建的腳本執(zhí)行,但是對(duì)于來(lái)自網(wǎng)絡(luò)的腳本,則需要有受信任的數(shù)字簽名才能執(zhí)行;
  4. Unrestricted(無(wú)限制),只要是個(gè).ps1腳本都可以執(zhí)行。

  當(dāng)前使用的什么執(zhí)行策略,可以通過(guò)“Get-ExecutionPolicy”查看;默認(rèn)情況下,Powershell的執(zhí)行策略是Restricted。為了方便進(jìn)行練習(xí),可以通過(guò)“Set-ExecutionPolicy”命令將執(zhí)行策略改為“RemoteSigned”,就像這樣

  1. PS F:\> Get-ExecutionPolicy # 查看當(dāng)前的執(zhí)行策略 
  2. Restricted 
  3. PS F:\> Set-ExecutionPolicy RemoteSigned # 回車后會(huì)有確認(rèn)提示,當(dāng)然選Y 
  4. 執(zhí)行策略更改 
  5. 執(zhí)行策略可以防止您執(zhí)行不信任的腳本。更改執(zhí)行策略可能會(huì)使您面臨 about_Execution_Policies 
  6. 幫助主題中所述的安全風(fēng)險(xiǎn)。是否要更改執(zhí)行策略? 
  7. [Y] 是(Y)  [N] 否(N)  [S] 掛起(S)  [?] 幫助 (默認(rèn)值為“Y”): Y 
  8. PS F:\> 

  現(xiàn)在,Hello World終于運(yùn)行出來(lái)了

  1. PS F:\> .\hello.ps1 
  2. Hello World 
  3. PS F:\> 

  知道為什么要在hello.ps1前面加上“.\”么?如果有研究精神,就該試試不加“.\”的hello.ps1。雖然執(zhí)行會(huì)出現(xiàn)錯(cuò)誤,但錯(cuò)誤信息里說(shuō)得很清楚,包括為什么這樣不行,以及應(yīng)該怎么樣。

尋求幫助

  既然已經(jīng)開(kāi)始使用Powershell,那么有兩個(gè)伙伴會(huì)一直陪伴你的Powershell生涯:錯(cuò)誤信息和Help。

  中文Windows下的Powershell,其大部分錯(cuò)誤信息都包含有中文的說(shuō)明,請(qǐng)不要忽略它,因?yàn)槿绻涣私忮e(cuò)誤原因,就不清楚該如何去更正。而錯(cuò)誤信息正是了解錯(cuò)誤原因最直接的途徑。

如果不清楚該怎么做,Help通常會(huì)提供給你非常有效有信息。比如,直接在控制臺(tái)里輸入Help并回車,控制臺(tái)里就會(huì)出現(xiàn)一大段文字說(shuō)明Help可以干什么,并在備注里提供了一些有效的參考信息。然后就可以根據(jù)提示嘗試一下“help get-command”,從新的信息中你就可以接觸到Powershell中的各種命令了——哦,在Powershell中它們叫Cmdlet。 

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)