天天看點

Powershell學習筆記——Powershell控制台和腳本檔案

  如果想知道是否已經安裝了Powershell,有個很簡單的辦法:用[Win+R]打開“運作”視窗,輸入“powershell”,回車。如果打開了Powershell控制台,那就是已經安裝了Powershell啦。如果想檢視Powershell的版本,有好幾種辦法,比如

PS F:\> $Host.Version.ToString() 

2.0 

PS F:\> $PSVersionTable 

Name                           Value 

----                           ----- 

CLRVersion                     2.0.50727.4961 

BuildVersion                   6.1.7600.16385 

PSVersion                      2.0 

WSManStackVersion              2.0 

PSCompatibleVersions           {1.0, 2.0} 

SerializationVersion           1.1.0.1 

PSRemotingProtocolVersion      2.1 

PS F:\> Get-Host 

Name             : ConsoleHost 

Version          : 2.0 

InstanceId       : 6632b7de-43d1-4ad1-8fcf-f632bdbd8387 

UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface 

CurrentCulture   : zh-CN 

CurrentUICulture : zh-CN 

PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy 

IsRunspacePushed : False 

Runspace         : System.Management.Automation.Runspaces.LocalRunspace 

PS F:\> 

  從開始菜單啟動“Windows Powershell”,或者通過“運作→powershell”打開的就是Powershell的控制台視窗。預設的控制台是80字元x25字元大小,黑底白字的視窗,不過這些都可以自定義。

  和CMD控制台視窗一樣,右鍵單擊Powershell控制台視窗的頂部标題欄位置,在彈出的菜單中選擇“屬性”,即可打開控制台視窗的屬性對話框。這個對話框有4個标簽頁:“選項”、“字型”、“布局”、“顔色”。

√ 選項 - 這裡最有用的設定就是“快速編輯模式”。如果勾選了這個選項,那麼在控制台視窗中進行文字的選擇、拷貝和粘貼就會非常友善:直接在控制台視窗中拖動滑鼠,矩形選區内的内容就被選中了;再單擊滑鼠右鍵,選中的内容就被放入了Windows剪貼闆,同時選區被取消。當剪貼闆内有文本内容的時候(不管是從控制台拷貝的還是從其它地方拷貝的),在控制台視窗内,無選區的狀态下,單擊右鍵,則剪貼闆中的内容就被粘貼出來了——這一切都很友善。但是,如果不勾選“快速編輯模式”,那麼上述操作都需要通過右鍵菜單來進行,操作比較繁瑣。順便提一下,在快速編輯模式下,右鍵直接是複制/粘貼操作,不會彈出右鍵菜單,那需要編輯上下文菜單的時候,就要在視窗标題欄位置單擊滑鼠右鍵,并在彈出菜單的“編輯”子菜單中去找需要的編輯指令啦。

√ 字型 - 就是在非常有限的字型清單裡選擇一個順眼的,再挑個合适的大小就行啦。

√ 布局 - 這裡需要設定兩個寬度和高度,它們都是以字元為機關而不是以像素為機關的。“視窗大小”裡設定的寬度和高度直接影響控制台視窗顯示的大小;而“螢幕緩沖區大小”則用于設定文本緩存區的矩形區域大小。緩沖區大小不能小于視窗大小。如果緩沖區大小大于視窗大小,則在視窗上會出現滾動條,通過拖動滾動條來檢視緩沖區在目前視窗以外的内容。一般情況下,視窗寬度和緩沖我寬度設定為同樣的值,但可以将緩沖區的高度設定得大一些,比如3000、6000、或者9999——記憶體不是問題,但更高的緩沖區意味着可以看到更多的曆史資訊。

√ 顔色 - 如果不喜歡黑底白字,那在這裡就可以改變啦。比如,可以将“螢幕背景”設定為白色,将“螢幕文字”設定為深灰色。這樣控制台視窗就變成白底黑字啦——應該是灰字,相比黑色字型,灰色字型沒那麼刺眼一些。

  設定完并“确定”之後,設定的内容被儲存,同時視窗會根據設定立即改變。關閉控制台視窗之後,下次以同樣的方式打開Powershell控制台視窗,那麼這些設定都會自動加載并應用。

  為什麼要說“同樣的方式打開”?如果常用CMD的話,這原因是一樣的,是以這些設定的儲存都與Powershell的快捷方式有關。不用知道Windows是通過什麼樣的方式讓設定與快捷方式相關的,但效果就是,通過不同的快捷方式打開的Powershell控制台,應用的是不同的設定。比如,通過開始菜單打開的Powershell和通過“運作”視窗打開的Powershell,兩個控制台視窗的設定就是不同的。

  Powershell控制台的快捷鍵和CMD控制台的快捷鍵一樣,常用的有如下一些:

← →

左右移動光标

↑ ↓

在指令曆史中滾動選擇曆史中的指令,便于重複執行指令,當然也可以先修改再執行

Home

将光标移動到目前指令的第1個字元位置

End

将光标移動到目前指令的最後1個字元之後

Ctrl+Home

從目前位置開始,清除目前指令中前面所有字元

Ctrl+End

從目前位置開始,清除目前指令中後面所有字元

Backspace

向前删除1個字元

Del

向後删除1個字元

Esc

清除目前已經輸入的指令

F3

顯示上次執行的指令。如果通過↑和↓鍵選擇了曆史指令,并通過Esc、Backspace、Del清除或删除了部分内容,則F3可以恢複顯示這條曆史指令。如果按F3之前輸入了部分内容,那F3顯示的曆史指令中相應的位置由輸入的字元替代。(這個說起來很麻煩,自己試試就知道了)

Tab

輸入指令時補全指令、檔案,或者對象成員

  Powershell腳本檔案是以.ps1作為擴充名的。曾經以為.ps1是Powershell 1.0的腳本檔案擴充名,而Powershell 2.0的腳本檔案擴充名是.ps2,但經過試驗,Powershell目前不管哪個版本,都不認.ps2這個擴充名。

  Powershell隻認識ANSI編碼(在簡體中文Windows下就是GBK)的腳本檔案。如果你把腳本檔案用UTF-8格式儲存,而腳本中又正好有中文的話,Powershell在執行腳本的時候會将中文都顯示成亂碼,偶爾還會報告文法錯誤。

  示例說話,先來個Hello World:

#hello.ps1 

"Hello World" 

  腳本中的第1句注釋不是必須的——對了,Powershell腳本使用#号來标記行注釋,#可以出現在一行的行首,也可以是其它位置,總之,一行内在它之後的内容都被認為是注釋内容了——回頭來說,這個腳本隻幹了一件事情,就是輸出Hello World。

  是不是有點疑惑,因為這裡沒有看到任何一個指令。是的,Powershell就是這麼神奇,常量值、變量值或者通過表達式運作出來的值,可以直接輸出到控制台。是以Powershell可以用作電腦,比如,在控制台中輸入指令:

PS F:\>1 + 3 * 4 # 這将會直接輸出運算結果13 

13 

  扯遠了。現在回過頭來運作hello.ps1,不過很遺憾,如果你是第一次執行Powershell腳本,那麼有可能會得到一個錯誤消息:

PS F:\> .\hello.ps1 

無法加載檔案 F:\hello.ps1,因為在此系統中禁止執行腳本。有關詳細資訊,請參閱 "get-help about_signing"。 

所在位置 行:1 字元: 12 

+ .\hello.ps1 <<<< 

    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException 

    + FullyQualifiedErrorId : RuntimeException 

  錯誤報告說系統禁止執行腳本——因為Powershell的執行政策阻止了這個被它認為不安全的腳本運作。

  Powershell的執行政策有4個:

  1. Restricted(受限),這個政策完全不允許任何腳本執行;

  2. AllSigned(所有已簽名),這個政策允許通過受信任的數字簽名的腳本執行;

  3. RemoteSigned(遠端下載下傳需簽名),這個政策不限制本地建立的腳本執行,但是對于來自網絡的腳本,則需要有受信任的數字簽名才能執行;

  4. Unrestricted(無限制),隻要是個.ps1腳本都可以執行。

  目前使用的什麼執行政策,可以通過“Get-ExecutionPolicy”檢視;預設情況下,Powershell的執行政策是Restricted。為了友善進行練習,可以通過“Set-ExecutionPolicy”指令将執行政策改為“RemoteSigned”,就像這樣

PS F:\> Get-ExecutionPolicy # 檢視目前的執行政策 

Restricted 

PS F:\> Set-ExecutionPolicy RemoteSigned # 回車後會有确認提示,當然選Y 

執行政策更改 

執行政策可以防止您執行不信任的腳本。更改執行政策可能會使您面臨 about_Execution_Policies 

幫助主題中所述的安全風險。是否要更改執行政策? 

[Y] 是(Y)  [N] 否(N)  [S] 挂起(S)  [?] 幫助 (預設值為“Y”): Y 

  現在,Hello World終于運作出來了

Hello World 

  知道為什麼要在hello.ps1前面加上“.\”麼?如果有研究精神,就該試試不加“.\”的hello.ps1。雖然執行會出現錯誤,但錯誤資訊裡說得很清楚,包括為什麼這樣不行,以及應該怎麼樣。

  既然已經開始使用Powershell,那麼有兩個夥伴會一直陪伴你的Powershell生涯:錯誤資訊和Help。

  中文Windows下的Powershell,其大部分錯誤資訊都包含有中文的說明,請不要忽略它,因為如果不了解錯誤原因,就不清楚該如何去更正。而錯誤資訊正是了解錯誤原因最直接的途徑。

  如果不清楚該怎麼做,Help通常會提供給你非常有效有資訊。比如,直接在控制台裡輸入Help并回車,控制台裡就會出現一大段文字說明Help可以幹什麼,并在備注裡提供了一些有效的參考資訊。然後就可以根據提示嘗試一下“help get-command”,從新的資訊中你就可以接觸到Powershell中的各種指令了——哦,在Powershell中它們叫Cmdlet。 

本文轉自邊城__ 51CTO部落格,原文連結:http://blog.51cto.com/jamesfancy/679504,如需轉載請自行聯系原作者

繼續閱讀