windows為什么有兩個命令行工具? PowerShell VS 命令提示符區(qū)別對比

作為普通的 Windows 用戶,在通常情況下都不太會用到命令行界面。但要執(zhí)行高級任務(wù),命令行通常會賦予用戶更多的操控功能和靈活性。而 Windows 系統(tǒng)中提供了命令提示符和 PowerShell 兩種命令行工具,乍看之下 PowerShell 和命令提示符非常相似,實則兩者之間有非常顯著之差異。本文中,我們將對命令提示符和 PowerShell 都進(jìn)行簡要介紹。
什么是命令提示符
命令提示符是微軟從 Windows NT (Windows NT 3.x 及之后版本) 便開始提供的默認(rèn)命令行界面,它其實是一個 Win32 應(yīng)用程序,使用它我們可通過 Win32 類與操作系統(tǒng)進(jìn)行交互。命令提示符提供了非常友好命令結(jié)構(gòu),可被用于執(zhí)行批處理文件、協(xié)助 Windows 排錯及執(zhí)行其它高級操作。
提示:由于命令提示符界面與 MS-DOS 的黑窗口太過相似,很多人誤稱為 DOS,這種說法其實是錯誤的。
什么是PowerShell
PowerShell 基于 .NET framework,其第一個版本于 2006 年發(fā)布,功能比命令提示符強(qiáng)大和先進(jìn)很多,其功能特性包括:管道輸出、自動任務(wù)及遠(yuǎn)程執(zhí)行等。
由于 PowerShell 與 Windows 操作系統(tǒng)深度集成,同時提供了命令行及腳本語言的交互方式,因此它常被系統(tǒng)管理員和 IT Pro 用于執(zhí)行自動化任務(wù)和配置管理。
PowerShell與命令提示符有何不同
PowerShell 相比命令提示符提供了更多的功能特性和更好的性能,事實上幾乎所有(但不僅限于) Windows 模塊都可以使用 PowerShell 進(jìn)行管理,而命令提示符是做不到的,所以它都會成為系統(tǒng)管理員的神兵利器。
雖然提到 PowerShell 大多數(shù)人首先還是會想到標(biāo)準(zhǔn)的命令行界面,但不要忘了 Windows 中還附帶了 PowerShell ISE(集成開發(fā)環(huán)境),它可以幫助我們快速創(chuàng)建和訂制各種復(fù)雜的 PowerShell 腳本。
說白了,本文的目的是想讓廣大管理員盡可能的都學(xué)習(xí) PowerShell,畢竟命令提示符在大模型環(huán)境管理中能為我們做的太有限了。
技術(shù)層面介紹:
Windows的兩個命令行工具,他們都可以用來人機(jī)交互, 并提供一個用于自動化 IT 操作的環(huán)境。
CMD Shell 是最早內(nèi)置于 Windows 中的 Shell,用于執(zhí)行windows命令,執(zhí)行批處理文件這里指的是(.bat)文件,還有執(zhí)行自動化任務(wù)等功能。
PowerShell 的設(shè)計目的是擴(kuò)展CMD Shell 的功能,可以運(yùn)行稱為 cmdlet 的 PowerShell 命令。Cmdlet 類似于 Windows 命令,但提供了更多可擴(kuò)展的腳本語言功能。您可以在 PowerShell 中運(yùn)行 Windows 命令和 PowerShell 專屬的cmdlet,但CMD Shell 只能運(yùn)行 Windows 命令,不能運(yùn)行 PowerShell cmdlet。
事實上 cmd是老舊的DOS操作系統(tǒng)繼承來的產(chǎn)物,所以他的功能十分有限,你輸入命令,windows執(zhí)行命令僅此而已。然而 Power Shell 不但是更藍(lán)了,也更強(qiáng)了。除了能執(zhí)行普通的window命令外,他還是一個完整的腳本語言運(yùn)行環(huán)境。
比如我在cmd里面敲擊 1+1回車,由于這不是一個window命令 cmd完全不懂要干什么,直接報錯。
然而powershell 作為一個編程環(huán)境,他明白1+1應(yīng)該進(jìn)行數(shù)字運(yùn)算,所以輸出了2。
powershell里面也可以定義變量,定義函數(shù)。這其實很像一些高級編程語言的命令行交互環(huán)境了,比如python。
其實powershell完全可以作為cmd 命令行的上位替代。事實上在win11版本,桌面點擊右鍵,默認(rèn)的命令行工具就是powershell
cmdlet
Cmdlet這個單詞 是 "command-let" 的縮寫,是一種專門在 Windows PowerShell 中使用的命令。Cmdlet 是由 .NET 庫編寫的。
Cmdlet 的命名遵循 "動詞-名詞" 的格式,例如 Get-Process
故名思議就是獲取當(dāng)前進(jìn)程, 或 Set-Location
意思是切換目錄。 這時候你也許會好奇,window已經(jīng)有了cd命令 為什么又要發(fā)明一種又臭又長的 Set-Location命令呢。
事實上 PowerShell 的 Set-Location
不僅僅能用于更改文件的目錄,還可以用于更改其他東西(如注冊表目錄、證書存儲目錄等)。這使得 PowerShell 的 Set-Location
比傳統(tǒng)的 cmd 中的 cd
更強(qiáng)大。 傳統(tǒng)的 Windows 命令通常返回純文本輸出,這使得對輸出進(jìn)行解析和處理變得困難。而 PowerShell 的 Cmdlet 返回 .NET 對象,允許更復(fù)雜和精確的數(shù)據(jù)操作。這種對象模型使得數(shù)據(jù)在管道中傳遞時,能夠保留其結(jié)構(gòu)。
為了讓Powershell 能完全兼容舊版本的cmd命令,微軟發(fā)明了一種 Alias別名的機(jī)制,舊版cmd命令在 powershell中都通過別名連接到一個cmdlet命令。比如在powershell中 cd就是 Set-Location的別名,他們兩個在powershell中是完全等價的。在powershell中輸入cd 也就的等于輸入 Set-Location。
這里要注意一點,cmd中的cd與powershell中的cd雖然長得一樣,功能也類似,但是底層實現(xiàn)機(jī)制已經(jīng)有了本質(zhì)區(qū)別,前者是一個簡單的windows命令,后者是一個cmdlet。
我們可以用Get-Alias命令來查看所有的別名關(guān)系。
這個Get-Alias表格也不全是舊版的cmd命令,其中還吸納了一些Linux命令,比如ls。
我們在cmd輸入ls,直接報錯,因為ls不是windows命令。但是powershell輸入ls則會顯示當(dāng)前目錄文件。因為ls 與 Get-ChildItem是別名關(guān)系。如果你熟悉Linux命令的,可能感到狂喜,因為好多命令都是通用的,又減少了一部分學(xué)習(xí)成本。
綜上所述cmd用戶可以無縫過渡到powershell,不用支付任何學(xué)習(xí)成本,Linux用戶也可以絲滑學(xué)習(xí)使用powershell,因為好多命令都是通用的。 因此powershell完全可以作為cmd 命令行的上位替代,用慣了cmd的各位不妨都來學(xué)習(xí)下powershell。
管道符
| 這個豎線是管道符,意思是把上個命令的輸出結(jié)果作為下個命令的輸入,可以像拼接管道一樣把命令拼接起來,形成一條流水線。由于cmdlet返回的是一個.net對象,可以很方便的使用管道符進(jìn)行命令拼接。
我舉幾個例子帶大家感受一下
獲取前五個CPU占用率最高的進(jìn)程
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
Windows目錄下所有可執(zhí)行文件exe的大小是多少?
Get-ChildItem $env:windir -Filter *.exe | Measure-Object -Sum Length
假設(shè)有一個 CSV 文件 data.csv
,其中包含用戶信息。你想要篩選出年齡大于 30 的用戶
然后轉(zhuǎn)成html格式,最后輸出到output.html文件
Import-Csv data.csv | Where-Object {$_.Age -gt 30} | ConvertTo-Html | Out-File output.html
腳本編程
powershell 與 cmd 其實都可以編寫腳本程序。 cmd是腳本文件的擴(kuò)展名是bat 而powershell的擴(kuò)展名則是ps1。但是bat程序比較難寫, 比起ps1的多了很多很多局限性。 比如bat文件中甚至不允許if嵌套。
比如這個bat腳本,由于不允許if嵌套,只能用使用goto語句代替,代碼邏輯go來go去,簡直不是人讀的。
@echo off setlocal set var1=1 set var2=2 if %var1%==1 goto FirstLevelMet goto End :FirstLevelMet echo First level condition met if %var2%==2 goto SecondLevelMet goto End :SecondLevelMet echo Second level condition met :End pause
powershell則更像一個現(xiàn)代編程語言
可以使用括號與嵌套if 更直觀表示代碼層級,代碼行數(shù)直接砍半。
$var1 = 1 $var2 = 2 if ($var1 -eq 1) { Write-Output "First level condition met" if ($var2 -eq 2) { Write-Output "Second level condition met" } }
所以編寫復(fù)雜的windows批處理程序,我建議還是直接用powershell,可以極大減輕程序員的痛苦指數(shù)。
cmdlet補(bǔ)充
我來補(bǔ)充幾個powerShell的cmdlet的功能,cmd一般沒有這些功能。
# 查看所有支持的命令 Get-Command # 更新幫助文檔 Update-Help # 獲取幫助 Get-Help <cmdlet> ## 以下是跟Linux完全相同的命令 ## 如果你熟悉Linux,就仿佛回到家了 # 清屏 clear # 獲取當(dāng)前目錄 pwd # 列出當(dāng)前目錄所有文件 ls # 查看文件 cat <filename> # 創(chuàng)建文件夾 mkdir <dirname> # 移動文件 mv <filename> <dirname> # 復(fù)制文件 cp <filename> <dirname> # 刪除 rm <filename> #輸出到CSV export-csv -Path <filename> # 當(dāng)前進(jìn)程到出到csv文件 ps | export-csv -Path test.csv # 導(dǎo)出html ps | convertto-html > test.html #文件修改 # 追加 add-content <filename> <content> # 覆蓋 set-content <filename> <content>
總結(jié)今天的內(nèi)容 ,Windows Power Shell 不但是更藍(lán)了,也更強(qiáng)了。除了能執(zhí)行普通的window命令外,他還是一個完整的腳本語言運(yùn)行環(huán)境。因此powershell是cmd 命令行的上位替代,用慣了cmd的各位不妨來學(xué)習(xí)下powershell,你會發(fā)現(xiàn)一個新的世界。
相關(guān)文章
Windows Server 2025 Build 26304預(yù)覽版發(fā)布:新增Defender應(yīng)用控制
Windows Server 2025 最新 Build 26304 預(yù)覽版發(fā)布,這個版本主要新增Defender應(yīng)用控制,詳細(xì)請看下文介紹2024-10-12怎么看windows的版本? 輕松查看你的Windows版本5種方法
了解Windows版本信息是進(jìn)行系統(tǒng)維護(hù)、軟件兼容性檢查以及故障排除等日常操作中的重要一環(huán),下面我們就分享輕松獲取Windows版本信息,無論您使用的是Windows 10、Windows 112024-10-11Windows Server 26296 預(yù)覽版發(fā)布:附完整更新日志
昨天,微軟發(fā)布了Windows Server Build 26296 預(yù)覽版更新,主要改進(jìn) Windows Admin Center、可以訪問全新的 Feedback Hub 應(yīng)用等,詳細(xì)更新日志如下2024-09-28如何快速修復(fù)Windows文件類型關(guān)聯(lián)? Windows系統(tǒng)文件關(guān)聯(lián)詳解
在Windows操作系統(tǒng)中,文件關(guān)聯(lián)扮演著至關(guān)重要的角色,簡單來說,文件關(guān)聯(lián)就是Windows系統(tǒng)根據(jù)文件的擴(kuò)展名,自動判斷并確定用哪個程序來打開這個文件的功能2024-09-20請用戶盡快更新! Windows Server 26280 預(yù)覽版發(fā)布
Windows Server 26280預(yù)覽版最大的變化就是將有效期調(diào)至 2025 年 9 月 15 日,這意味著所有下載并使用舊 Windows Server 預(yù)覽版的用戶都需要下載并安裝新的 26280 版本2024-09-09Windows系統(tǒng)啟動設(shè)置提示找不到此應(yīng)用怎么辦? 微軟提供修復(fù)指南
Windows系統(tǒng)中啟動設(shè)置部分中的某些應(yīng)用程序無法選擇,會顯示“找不到此應(yīng)用”的錯誤消息,微軟提供了官方的修復(fù)方法,詳細(xì)請看下文介紹2024-09-03Windows新Bug! AMD處理器可通過切換到隱藏管理員賬戶提高游戲性能
AMD也已向HardwareUnboxed確認(rèn),使用最高權(quán)限的隱藏管理員賬戶可以實現(xiàn)最佳游戲性能,據(jù)稱,該問題將在未來的Windows更新中修復(fù),但目前尚不清楚何時修復(fù),Windows這個“Bug2024-08-16值得收藏! Windows 20個經(jīng)典cmd命令
在Windows操作系統(tǒng)中,命令提示符(CMD)是一個強(qiáng)大的工具,它允許用戶與操作系統(tǒng)進(jìn)行交互式操作,以下是一些常用的CMD命令及其操作示例2024-07-29玩轉(zhuǎn)windows! Windows常用命令大全
windows操作系統(tǒng)提供了許多實用的命令行工具,用戶可以執(zhí)行各種任務(wù),如文件管理、系統(tǒng)維護(hù)、網(wǎng)絡(luò)配置等,掌握這些命令不僅能提高工作效率,還能幫助用戶解決許多復(fù)雜的問題2024-07-25Windows系統(tǒng)中通過route命令添加自定義永久路由的方法
這篇文章主要介紹了Windows系統(tǒng)中通過route命令添加自定義永久路由的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-07-25