Powershell快速入門(一) 安裝和使用

一提及 Shell 編程,咱們你們想到的應該都是Linux 下的 Shell 編程。其實 Windows 下也可使用功能強大的 Shell 來編寫程序,這就是今天我要介紹的 Powershell。從名字就能夠看出來,Powershell的功能很強大,因此纔敢叫Powershell。html

若是須要看官方文檔的話,點擊這裏。雖然有一些機翻的意味,可是徹底能夠看。mysql

須要說明一點,Powershell是構建在.NET平臺上的,全部命令傳遞的都是.NET對象。因此爲了更好地使用Powershell,最好有一點.NET編程基礎,這樣學習Powershell就會感受很是輕鬆和愉快。git

安裝Powershell

這裏我介紹的是 Powershell 5.0 ,它在 Windows Server 2016 和Windows 10 操做系統中是默認安裝的。若是使用的是比較舊的操做系統例如 Windows 7 或者 Windows 8.1 ,就須要手動安裝 Powershell 5.0 。下載也很簡單,到這裏下載 WMF 5.0,它包含了 Powershell 5.0 和一系列工具。github

若是要查看當前Powershell版本的話,也很簡單。在Powershell窗口中使用下面的命令便可查看相關信息。sql

C:\Users\asddf> $PSVersionTable

Name                           Value                                                               
----                           -----                                                               
PSVersion                      5.1.15063.296                                                       
PSEdition                      Desktop                                                             
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                             
BuildVersion                   10.0.15063.296                                                      
CLRVersion                     4.0.30319.42000                                                     
WSManStackVersion              3.0                                                                 
PSRemotingProtocolVersion      2.3                                                                 
SerializationVersion           1.1.0.1

啓動Powershell

啓動 Powershell 很簡單,從運行對話框或者開始菜單中搜索powershell便可。這樣就能夠打開 Powershell 命令行窗口了。默認狀況下這是一個藍色的窗口。shell

在64位操做系統下,有兩個版本的 Powershell 。默認狀況下,咱們使用64位版本就能夠了。若是有特殊需求的話,能夠選擇啓動帶x86字樣的32位版本的 Powershell 。編程

Powershell窗口

啓動Powershell ISE

在終端中敲命令是一件很麻煩的事情,有沒有什麼集成環境可讓咱們進行交互式學習呢?固然是有的,Windows 附帶了一個交互式環境,叫作Powershell ISE,能夠幫助咱們更方便的學習和使用 Powershell。瀏覽器

啓動 Powershell ISE也很簡單,在Windows 10下,直接在開始菜單中輸入 ISE,就能夠打開Powershell ISE了。網絡

Windows Powershell ISE

命令介紹

首先說明一下,和 Linux Shell 不一樣,Powershell 的命令基本上都是動詞-名詞形式的。這樣作的好處是命令做用很容易就能夠看出,缺點就是輸入稍微有些麻煩,習慣了Linux 的簡潔的同窗可能會不太適應。函數

Powershell 和Linux Shell 還有一個不一樣點在於Powershell 是基於 .NET平臺的,它的命令叫作cmdletcmdlet功能比普通的Linux 命令更強,由於cmdlet接受的參數不是字符串,而是 .NET 對象,這使得Powershell 的功能更增強大和靈活。

獲取命令

若是想要獲取當前會話中全部可用的內置命令,可使用命令Get-Command,它的別名是gcm

PS C:\Users\asddf> Get-Command 

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-Command                                        3.0.0.0    Microsoft.PowerShell.Core
.....

若是但願列出指定名稱的命令,可使用Name參數。

PS C:\Users\asddf> Get-Command -Name Get-Command

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-Command                                        3.0.0.0    Microsoft.PowerShell.Core

獲取別名

有些命令比較經常使用,除了動詞-名詞版本外,Powershell還提供了和Linux 同樣的別名來簡化輸入。咱們可使用-CommandType Alias參數來顯示全部的命令別名。下面列舉了一部分輸出,能夠看到,微軟爲了照顧Linux用戶,不少命令都縮寫爲Linux 命令的形式。

PS C:\Users\asddf> Get-Command -CommandType Alias

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ac -> Add-Content
Alias           blsmba ->                                          2.0.0.0    SmbShare
Alias           cat -> Get-Content
Alias           cd -> Set-Location
Alias           chdir -> Set-Location
Alias           clc -> Clear-Content
Alias           clear -> Clear-Host
Alias           clhy -> Clear-History
Alias           cli -> Clear-Item
Alias           clp -> Clear-ItemProperty
Alias           cls -> Clear-Host

固然,若是你觀察仔細的話,會發現命令類型這一欄有Aliascmdlet以及function三種類型。因此我在前面使用了「內置命令」這個詞。函數基本上就是最簡單的命令,例如清屏(Clear-Host),不能接受參數,功能比較基本。cmdlet則是功能強大的命令,能夠接受各種參數,還能複合使用。Alias則是前二者的別名,做用是簡化輸入。

獲取動詞/名詞

固然,若是想查找特定動詞/名詞的命令也是能夠的。比方說,若是我想查找全部以Get開頭的命令,可使用下面的命令。

PS C:\Users\asddf> Get-Command -Verb Get

相應的,若是我想獲取全部名詞是Help的命令,可使用下面的命令。

PS C:\Users\asddf> Get-Command -Noun Help

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-Help                                           3.0.0.0    Microsoft.PowerShell.Core
Cmdlet          Save-Help                                          3.0.0.0    Microsoft.PowerShell.Core
Cmdlet          Update-Help                                        3.0.0.0    Microsoft.PowerShell.Core

上面的命令都只列出了內置命令。若是須要包含包括普通程序在內的全部命令,可使用通配符。

PS C:\Users\asddf> Get-Command *

獲取幫助

若是要獲取一個命令的幫助,可使用Get-Help。若是使用上面介紹的列出別名的命令的話,會發現這個命令的別名是man,剛好就是Linux 系統下的獲取幫助的命令。固然它們的功能也很類似。

比方說,咱們要查看一下清除屏幕這個命令的幫助,就能夠簡單的輸入下面的命令。Powershell 會自動將別名解析爲實際命令名稱。因此咱們能夠看到,cls其實是Clear-Host命令的別名。

PS C:\Users\asddf> man cls

名稱
    Clear-Host

摘要


語法
    Clear-Host [<CommonParameters>]


說明


相關連接
    https://go.microsoft.com/fwlink/?LinkID=225747

備註
    若要查看示例,請鍵入: "get-help Clear-Host -examples".
    有關詳細信息,請鍵入: "get-help Clear-Host -detailed".
    若要獲取技術信息,請鍵入: "get-help Clear-Host -full".
    有關在線幫助,請鍵入: "get-help Clear-Host -online"

其實從這個命令的幫助信息來看,咱們就能夠得到大部分信息。比方說,若是咱們要查看這個命令的在線幫助,就能夠如同上面的備註所說,在命令上添加-online參數,這樣就會打開瀏覽器跳轉到這個命令的在線幫助頁上。

值得一提的還有幫助參數-?、若是一個命令添加了幫助參數,那麼Powershell 不會實際執行這個命令,而是顯示它的幫助信息。

服務管理

原來,若是咱們使用批處理來管理Windows服務的話,通常狀況下用的是sc這個命令。這個命令的做用有不少,其中一項就是啓動和中止Windows服務。不過在Powershell下有更好用的服務管理命令,功能也更增強大。

首先咱們先查看一下有什麼管理服務的命令,只須要查詢一下名詞是service的命令便可。能夠看到這些命令涵蓋了從建立服務到管理服務的各個方面,功能很豐富。

PS C:\Users\asddf> Get-Command -Noun service

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-Service                                        3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          New-Service                                        3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Restart-Service                                    3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Resume-Service                                     3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Set-Service                                        3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Start-Service                                      3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Stop-Service                                       3.1.0.0    Microsoft.PowerShell.Management
Cmdlet          Suspend-Service                                    3.1.0.0    Microsoft.PowerShell.Management

比方說,咱們要查詢一下當前計算機安裝了哪些和MySQL相關的服務,就能夠用下面的命令。

PS C:\Users\asddf> Get-Service mysql*

Status   Name               DisplayName
------   ----               -----------
Running  MySQL57            MySQL57

而後若是須要中止服務也很簡單,須要注意中止服務的話須要管理員權限,所以Powershell須要在管理員模式下運行。

PS C:\WINDOWS\system32> Stop-Service  MySQL57
警告: 正在等待服務「MySQL57 (MySQL57)」中止...

其餘命令就不介紹了,配合幫助命令能夠很快學習如何使用。

應用實例

最後直接從網上找了個例子來看看Powershell的實際做用。咱們能夠從中瞭解到Powershell的強大特性,用它幫助咱們方便地管理Windows操做系統。

Office互操做

這裏貼一個網絡上的例子,我是從知乎上看到的。運行一下會直接打開Excel並填充數據,而後畫出佔用內存前十的程序的餅狀圖,一鼓作氣。我第一次運行的時候簡直驚呆了。

# create new excel instance
 $objExcel = New-Object -comobject Excel.Application
 $objExcel.Visible = $True
 $objWorkbook = $objExcel.Workbooks.Add()
 $objWorksheet = $objWorkbook.Worksheets.Item(1)

 # write information to the excel file
$i = 0
$first10 = (ps | sort ws -Descending | select -first 10)
$first10 | foreach -Process {$i++; $objWorksheet.Cells.Item($i,1) = $_.name; $objWorksheet.Cells.Item($i,2) = $_.ws}
$otherMem = (ps | measure ws -s).Sum - ($first10 | measure ws -s).Sum
$objWorksheet.Cells.Item(11,1) = "Others"; $objWorksheet.Cells.Item(11,2) = $otherMem

# draw the pie chart
$objCharts = $objWorksheet.ChartObjects()
$objChart = $objCharts.Add(0, 0, 500, 300)
$objChart.Chart.SetSourceData($objWorksheet.range("A1:B11"), 2)
$objChart.Chart.ChartType = 70
$objChart.Chart.ApplyDataLabels(5)

固然其實Powershell能作的事情很是多。微軟自從Powershell出現以後就一直推進Windows和Powershell的互操做。到如今爲止大概大部分Windows管理和配置功能均可以使用Powershell來進行。

一開始我也對Powershell不太瞭解。不過了解了一點以後,我感受Powershell的功能確實對得起它的名字。我已經決定學習完Powershell以後,未來在全部可使用Powershell的地方所有使用它,享受命令行管理系統的快感。

Powershell美化

oh-my-posh

最後來講說Powershell美化,其實默認狀況下的Powershell已經很好用了。默認那個藍色窗口支持智能補全,能夠知足大多數場合的需求。固然若是想要定製成oh-my-zsh那樣的話也是能夠的。

有一個項目叫作oh-my-posh,作的就是相似oh-my-zsh的工做的。不過這個項目仍是有些缺點,不能像oh-my-zsh那樣一條命令自動配置好全部東西。這個項目折騰起來仍是稍稍費些事情的,須要作如下幾件事情:

  1. 安裝ConEmu終端程序

  2. 下載一套打過補丁的字體,例如Inziu Iosevka或者nerd-fonts 

  3. 安裝oh-my-posh的兩個包

  4. 在ConEmu中啓動Powershell,而後調用Set-Theme命令切換主題。

我嘗試了一下,可是可能字體沒安裝全仍是什麼緣由,沒有達到官方這張圖的效果。有興趣的同窗能夠自行嘗試折騰一下。

oh-my-posh

cmder

cmder是一個基於ConEmu二次開發的終端模擬器,我試用了一下還不錯。默認狀況下的配色和界面就挺好看的了。有興趣的同窗能夠試試。

cmder

相關文章
相關標籤/搜索