
圖1:PowerShell打開方式
問題來了,PowerShell這貨憑什麼力壓CMD,強行上位?如果你之前試用過PowerShell,相信它一定沒有給你什麼好印象。打開慢!反應慢!命令還陌生!還動不動就彈一大堆誰都看不懂錯誤,PowerShell究竟憑什麼在Windows10創意者更新中替代命令提示符CMD呢?微軟腦抽了?
微軟沒有腦抽,PowerShell是憑借其強大的功能替換CMD的。這裏要先說明以下PowerShell究竟是什麼東西,或者它究竟是不是東西?
Windows PowerShell不是東西,它是專為係統管理員設計的新Windows命令行shell,它包括交互式提示和腳本環境。PowerShell定義很多命令與操作係統,特別是與文件係統交互,能夠啟動應用程序,甚至操縱應用程序;PowerShell允許將幾個命令組合起來放到文件裏執行,實現文件級的重用,也就是說有腳本的性質;PowerShell能夠能夠充分利用.Net類型和COM對象,來簡單地與各種係統交互,完成各種複雜的、自動化的操作。
用人話說就是CMD能做的PowerShell都能做,CMD不能做的Powershell也能做。就是這麼自信!不信?趕緊打開PowerShell把下麵的命令複製進去,看看它幹了什麼事,然後你用CMD做出來吧!
# 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)

圖2:使用PowerShell生成Excel圖表
上麵一段代碼是PowerShell界常見的一段神代碼,很多初學者被其帶入了PowerShell的大門。有效代碼不過20來行,作用是把當前係統中最占內存的10個進程的數據發送到Excel中,並繪製成三維餅圖。CMD是很難做到了,被替代也理所應當了。
PowerShell的定位是操作係統和應用程序的管理工具,從這個角度看,它是CMD的升級版,並非簡單的對CMD進行擴展,事實上微軟也不打算擴展和升級CMD了,以後PowerShell將全方位的替代CMD,目前CMD和PowerShell還是並存狀態。
下麵正式介紹PowerShell。
一、簡單的命令
在CMD中,命令是從非常簡單(如attrib.exe)到非常複雜(如netsh.exe)的可執行程序,新入門用戶一旦遇到複雜命令,隻能束手無策,隻能求助搜索引擎,解決當前需求之後,就把命令的用法拋諸腦後,下次使用又要重新學習,極其不便。

圖3:複雜的netsh命令
PowerShell命令設計非常規範,它的命令由“動詞”和“名詞”兩部分組成,比如“get”表示檢索數據,“process”表示係統進程,把“get”和“process”組合起來的PowerShell命令就是“get-process”,意思是獲取係統進程列表,這種命令在PowerShell中稱為“cmdlet(讀作“command-let”)”。

圖4:使用get-process命令獲取係統進程
像“get-process”這樣“動詞-名詞”結構有個好處,具有相同“名詞”的命令通常是一類命令,比如都擁有“process”的命令有:

圖5:擁有“process”的命令
使用“動詞-名詞”結構還有一個好處,就是不同的“動詞”和“名詞”可以自由組合,很少的幾個“動詞”和“名詞”就可以組合出大量的可用命令,使命令記憶量大為降低,隻需記住簡單的幾個詞語,就可以使用大量的命令,這是包括命令提示符CMD在內的Shell不具備的,並且不會產生歧義,對新用戶非常友好。
二、別名係統
“動詞-名詞”結構的cmdlet固然對新手友好,但也帶來了另一個問題,命令名稱過長,在命令行交互使用時不方便,在命令行窗口輸入命令可以使用Tab鍵進行補全,可是經常使用還是需要鍵入大量的內容,要是能夠把命令縮短一些就好了。PowerShell在設計時已經考慮到了,為此創建了別名係統,之所以叫名別係統,是因為PowerShell中的別名非常強大,能夠非常方便的對別名進行增加、刪除、修改,還為之創建了別名驅動器,可以像訪問文件係統驅動器一樣方便的訪問別名驅動器。
PowerShell非常貼心的為用戶創建了大量內置別名,一方麵減少了常用命令的輸入長度,另一方麵也為熟悉其它Shell而不熟悉PowerShell的用戶提供了方便,常見Shell如bash、cmd,PowerShell都為用戶提供了他們熟悉的別名。下麵是可以在Powershell中使用的通用的Cmd.exe和UNIX命令的簡短列表。

圖6:PowerShell兼容性別名列表
PowerShell除了自帶別名外,用戶自己也可以創建別名,不僅僅可以為cmdlet創建別名,也可以為PowerShell函數、帶參數的命令和包含完整路徑的命令行程序創建別名。
比如為記事本創建別名,可以使用如下命令:
New-Alias np c:\windows\notepad.exe
創建別名完成後,在命令行中輸入np就能直接打開記事本。在命令行中創建的別名隻能在當前命令行窗口中使用,如果想以後也能使用此別名,可以把以上命令保存在PowerShell配置文件中,以後無論是在命令行中,還是使用腳本,都可以在本機使用np別名了。PowrShell配置文件位置可以使用$profile命令查詢。
想查看當前命令行窗口可以使用的別名,可以進入別名驅動器查看,使用dir alias:就能查看所有能用的別名,也可以使用get-alias命令查看別名。

圖7:查看PowerShell別名驅動器
三、管理任務
Windows PowerShell的基本目標是使用戶能夠以交互方式或通過腳本更好、更容易地對係統進行管理控製,為了達成這個目標,PowerShell提供了大量命令來執行各種管理任務,讓用戶輕鬆完成管理係統任務。
1、管理進程
前麵已經提過管理係統進程的命令,管理進程常用命令就是get-process命令和stop-process命令,get-process命令獲取進程之後可以直接用管道發送給stop-process命令結束進程。比如,關閉之前打開的記事本,可以使用下麵的命令很方便的關閉記事本。
get-process -Name notepad | stop-process
2、處理文件和文件夾
PowerShell使用Get-ChildItem獲取文件夾中直接包含的所有項,它有係統內置別名dir和ls,使用CMD和BASH的用戶均可以輕鬆上手。如果想查看C:中的文件夾和文件,直接使用dir c:,PowerShell立刻就會列出C:中的文件和文件夾。其它處理文件和文件夾的命令有Copy-Item、New-Item、Remove-Item等,具體用法可以使用get-help然後跟命令名稱即可查詢。
3、處理係統服務
可以像管理進程一樣管理係統服務,Get-Service命令獲取服務列表,Stop-Service命令停止服務,Start-Service命令啟動服務,Suspend-Service命令掛起服務,Restart-Service命令重啟服務,Set-Service服務設置服務屬性。如果想一次性啟動已經停止的服務,可以使用以下命令:
get-service | where-object {$_.Status -eq "Stopped"} -exclude
wisvc | start-service
這行命名會把除wisvc之外的命令都啟動,這隻是一個示例,不要在自己電腦使用,啟動所有服務會消耗大量係統資源。
4、處理注冊表
PowerShell可以非常方便的處理注冊表項目,與進程和服務不同的是,PowerShell並未提供專用的注冊表命令,而是使用處理文件和文件夾的命令,這並不奇怪,PowerShell為用戶提供了注冊表驅動器,可以很好的處理注冊表項目。由於注冊表對係統非常重要,錯誤處理注冊表也許會導致係統出問題,處理注冊表,特別是刪除注冊表項目要非常小心,最好能在處理注冊表項目之前先備份要處理的項目。沒有管理員權限也能處理部分注冊表項目,這與regedit注冊表編輯器不同,注冊表編輯器必須使用管理員權限打開,然後才能操作項目。

圖8:無管理員權限訪問HKLM:驅動器
下麵的表格列出了訪問注冊表所需的所有命令。

圖9:處理注冊表的命令與預定義的注冊表驅動器
PowerShell隻提供了兩個注冊表驅動器HKCU:和HKLM:,其中HKLM:是HKEY_LOCAL_MACHINE的縮寫,HKCU:是HKEY_CURRENT_USER的縮寫,如果想要訪問所有注冊表驅動器,可以進入Microsoft.PowerShell.Core\Registry::。
5、處理其它任務
PowerShell還可以處理證書、防火牆、appx應用、打印機等任務,篇幅所限,不具體舉例。大家可以使用get-command命令查找相關命令。
相關資訊
最新熱門應用
虛擬幣交易app
其它軟件179MB
下載
抹茶交易所官網蘋果
其它軟件30.58MB
下載
歐交易所官網版
其它軟件397.1MB
下載
uniswap交易所蘋果版
其它軟件292.97MB
下載
中安交易所2024官網
其它軟件58.84MB
下載
熱幣全球交易所app邀請碼
其它軟件175.43 MB
下載
比特幣交易網
其它軟件179MB
下載
雷盾交易所app最新版
其它軟件28.18M
下載
火比特交易平台安卓版官網
其它軟件223.89MB
下載
中安交易所官網
其它軟件58.84MB
下載