Windows 10是美國微軟公司研發(fā)的跨平臺及設(shè)備應(yīng)用的操作系統(tǒng)。是微軟發(fā)布的最后一個獨立Windows版本。Windows 10共有7個發(fā)行版本,分別面向不同用戶和設(shè)備。截止至2018年3月7日,Windows 10正式版已更新至秋季創(chuàng)意者10.0.16299.309版本,預(yù)覽版已更新至春季創(chuàng)意者10.0.17120版本
從Windows10創(chuàng)意者更新開始,PowerShell正式上位替換了命令提示符CMD。不論是Windows+X右鍵超級菜單,還是Shift+文件夾空白處右鍵,又或在文件資源管理器文件菜單中,都沒有命令提示符CMD的身影了,全部都由PowerShell取而代之了。長期使用CMD的Windows系統(tǒng)管理員或Windows命令行極客恐怕一時不能適應(yīng),使用CMD都只能去開始菜單-所有應(yīng)用-Windows系統(tǒng)-命令提示符打開使用,藏得這么深,顯然是不想讓人用了啊。
圖1:PowerShell打開方式
問題來了,PowerShell這貨憑什么力壓CMD,強行上位?如果你之前試用過PowerShell,相信它一定沒有給你什么好印象。打開慢!反應(yīng)慢!命令還陌生!還動不動就彈一大堆誰都看不懂錯誤,PowerShell究竟憑什么在Windows10創(chuàng)意者更新中替代命令提示符CMD呢?微軟腦抽了?
微軟沒有腦抽,PowerShell是憑借其強大的功能替換CMD的。這里要先說明以下PowerShell究竟是什么東西,或者它究竟是不是東西?
Windows PowerShell不是東西,它是專為系統(tǒng)管理員設(shè)計的新Windows命令行shell,它包括交互式提示和腳本環(huán)境。PowerShell定義很多命令與操作系統(tǒng),特別是與文件系統(tǒng)交互,能夠啟動應(yīng)用程序,甚至操縱應(yīng)用程序;PowerShell允許將幾個命令組合起來放到文件里執(zhí)行,實現(xiàn)文件級的重用,也就是說有腳本的性質(zhì);PowerShell能夠充分利用.Net類型和COM對象,來簡單地與各種系統(tǒng)交互,完成各種復(fù)雜的、自動化的操作。
用人話說就是CMD能做的PowerShell都能做,CMD不能做的Powershell也能做。就是這么自信!不信?趕緊打開PowerShell把下面的命令復(fù)制進(jìn)去,看看它干了什么事,然后你用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界常見的一段神代碼,很多初學(xué)者被其帶入了PowerShell的大門。有效代碼不過20來行,作用是把當(dāng)前系統(tǒng)中最占內(nèi)存的10個進(jìn)程的數(shù)據(jù)發(fā)送到Excel中,并繪制成三維餅圖。CMD是很難做到了,被替代也理所應(yīng)當(dāng)了。
PowerShell的定位是操作系統(tǒng)和應(yīng)用程序的管理工具,從這個角度看,它是CMD的升級版,并非簡單的對CMD進(jìn)行擴(kuò)展,事實上微軟也不打算擴(kuò)展和升級CMD了,以后PowerShell將全方位的替代CMD,目前CMD和PowerShell還是并存狀態(tài)。
下面正式介紹PowerShell。
一、簡單的命令
在CMD中,命令是從非常簡單(如attrib.exe)到非常復(fù)雜(如netsh.exe)的可執(zhí)行程序,新入門用戶一旦遇到復(fù)雜命令,只能束手無策,只能求助搜索引擎,解決當(dāng)前需求之后,就把命令的用法拋諸腦后,下次使用又要重新學(xué)習(xí),極其不便。
圖3:復(fù)雜的netsh命令
PowerShell命令設(shè)計非常規(guī)范,它的命令由“動詞”和“名詞”兩部分組成,比如“get”表示檢索數(shù)據(jù),“process”表示系統(tǒng)進(jìn)程,把“get”和“process”組合起來的PowerShell命令就是“get-process”,意思是獲取系統(tǒng)進(jìn)程列表,這種命令在PowerShell中稱為“cmdlet(讀作“command-let”)”。
圖4:使用get-process命令獲取系統(tǒng)進(jìn)程
像“get-process”這樣“動詞-名詞”結(jié)構(gòu)有個好處,具有相同“名詞”的命令通常是一類命令,比如都擁有“process”的命令有:
圖5:擁有“process”的命令
使用“動詞-名詞”結(jié)構(gòu)還有一個好處,就是不同的“動詞”和“名詞”可以自由組合,很少的幾個“動詞”和“名詞”就可以組合出大量的可用命令,使命令記憶量大為降低,只需記住簡單的幾個詞語,就可以使用大量的命令,這是包括命令提示符CMD在內(nèi)的Shell不具備的,并且不會產(chǎn)生歧義,對新用戶非常友好。
二、別名系統(tǒng)
“動詞-名詞”結(jié)構(gòu)的cmdlet固然對新手友好,但也帶來了另一個問題,命令名稱過長,在命令行交互使用時不方便,在命令行窗口輸入命令可以使用Tab鍵進(jìn)行補全,可是經(jīng)常使用還是需要鍵入大量的內(nèi)容,要是能夠把命令縮短一些就好了。PowerShell在設(shè)計時已經(jīng)考慮到了,為此創(chuàng)建了別名系統(tǒng),之所以叫名別系統(tǒng),是因為PowerShell中的別名非常強大,能夠非常方便的對別名進(jìn)行增加、刪除、修改,還為之創(chuàng)建了別名驅(qū)動器,可以像訪問文件系統(tǒng)驅(qū)動器一樣方便的訪問別名驅(qū)動器。
PowerShell非常貼心的為用戶創(chuàng)建了大量內(nèi)置別名,一方面減少了常用命令的輸入長度,另一方面也為熟悉其它Shell而不熟悉PowerShell的用戶提供了方便,常見Shell如bash、cmd,PowerShell都為用戶提供了他們熟悉的別名。下面是可以在Powershell中使用的通用的Cmd.exe和UNIX命令的簡短列表。
圖6:PowerShell兼容性別名列表
PowerShell除了自帶別名外,用戶自己也可以創(chuàng)建別名,不僅僅可以為cmdlet創(chuàng)建別名,也可以為PowerShell函數(shù)、帶參數(shù)的命令和包含完整路徑的命令行程序創(chuàng)建別名。
比如為記事本創(chuàng)建別名,可以使用如下命令:
New-Alias np c:\windows\notepad.exe
創(chuàng)建別名完成后,在命令行中輸入np就能直接打開記事本。在命令行中創(chuàng)建的別名只能在當(dāng)前命令行窗口中使用,如果想以后也能使用此別名,可以把以上命令保存在PowerShell配置文件中,以后無論是在命令行中,還是使用腳本,都可以在本機(jī)使用np別名了。PowrShell配置文件位置可以使用$profile命令查詢。
想查看當(dāng)前命令行窗口可以使用的別名,可以進(jìn)入別名驅(qū)動器查看,使用dir alias:就能查看所有能用的別名,也可以使用get-alias命令查看別名。
圖7:查看PowerShell別名驅(qū)動器
三、管理任務(wù)
Windows PowerShell的基本目標(biāo)是使用戶能夠以交互方式或通過腳本更好、更容易地對系統(tǒng)進(jìn)行管理控制,為了達(dá)成這個目標(biāo),PowerShell提供了大量命令來執(zhí)行各種管理任務(wù),讓用戶輕松完成管理系統(tǒng)任務(wù)。
1、管理進(jìn)程
前面已經(jīng)提過管理系統(tǒng)進(jìn)程的命令,管理進(jìn)程常用命令就是get-process命令和stop-process命令,get-process命令獲取進(jìn)程之后可以直接用管道發(fā)送給stop-process命令結(jié)束進(jìn)程。比如,關(guān)閉之前打開的記事本,可以使用下面的命令很方便的關(guān)閉記事本。
get-process -Name notepad | stop-process
2、處理文件和文件夾
PowerShell使用Get-ChildItem獲取文件夾中直接包含的所有項,它有系統(tǒng)內(nèi)置別名dir和ls,使用CMD和BASH的用戶均可以輕松上手。如果想查看C:中的文件夾和文件,直接使用dir c:,PowerShell立刻就會列出C:中的文件和文件夾。其它處理文件和文件夾的命令有Copy-Item、New-Item、Remove-Item等,具體用法可以使用get-help然后跟命令名稱即可查詢。
3、處理系統(tǒng)服務(wù)
可以像管理進(jìn)程一樣管理系統(tǒng)服務(wù),Get-Service命令獲取服務(wù)列表,Stop-Service命令停止服務(wù),Start-Service命令啟動服務(wù),Suspend-Service命令掛起服務(wù),Restart-Service命令重啟服務(wù),Set-Service服務(wù)設(shè)置服務(wù)屬性。如果想一次性啟動已經(jīng)停止的服務(wù),可以使用以下命令:
get-service | where-object {$_.Status -eq "Stopped"} -exclude
wisvc | start-service
這行命名會把除wisvc之外的命令都啟動,這只是一個示例,不要在自己電腦使用,啟動所有服務(wù)會消耗大量系統(tǒng)資源。
4、處理注冊表
PowerShell可以非常方便的處理注冊表項目,與進(jìn)程和服務(wù)不同的是,PowerShell并未提供專用的注冊表命令,而是使用處理文件和文件夾的命令,這并不奇怪,PowerShell為用戶提供了注冊表驅(qū)動器,可以很好的處理注冊表項目。由于注冊表對系統(tǒng)非常重要,錯誤處理注冊表也許會導(dǎo)致系統(tǒng)出問題,處理注冊表,特別是刪除注冊表項目要非常小心,最好能在處理注冊表項目之前先備份要處理的項目。沒有管理員權(quán)限也能處理部分注冊表項目,這與regedit注冊表編輯器不同,注冊表編輯器必須使用管理員權(quán)限打開,然后才能操作項目。
圖8:無管理員權(quán)限訪問HKLM:驅(qū)動器
下面的表格列出了訪問注冊表所需的所有命令。
圖9:處理注冊表的命令與預(yù)定義的注冊表驅(qū)動器
PowerShell只提供了兩個注冊表驅(qū)動器HKCU:和HKLM:,其中HKLM:是HKEY_LOCAL_MACHINE的縮寫,HKCU:是HKEY_CURRENT_USER的縮寫,如果想要訪問所有注冊表驅(qū)動器,可以進(jìn)入Microsoft.PowerShell.Core\Registry::。
5、處理其它任務(wù)
PowerShell還可以處理證書、防火墻、appx應(yīng)用、打印機(jī)等任務(wù),篇幅所限,不具體舉例。大家可以使用get-command命令查找相關(guān)命令。
新技術(shù)融合:在易用性、安全性等方面進(jìn)行了深入的改進(jìn)與優(yōu)化。針對云服務(wù)、智能移動設(shè)備、自然人機(jī)交互等新技術(shù)進(jìn)行融合。Windows 10所新增的Windows Hello功能將帶來一系列對于生物識別技術(shù)的支持。除了常見的指紋掃描之外,系統(tǒng)還能通過面部或虹膜掃描來讓你進(jìn)行登入。當(dāng)然,你需要使用新的3D紅外攝像頭來獲取到這些新功能。