亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

  發(fā)布時間:2024-10-29 10:31:15   作者:佚名   我要評論
windows為什么有兩個命令行工具? 一個叫CMD命令提示符,另一個叫PowerShell,他們兩個究竟有什么區(qū)別?乍看之下 PowerShell 和命令提示符非常相似,實則兩者之間有非常顯著之差異,詳細(xì)請看下文介紹

作為普通的 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)文章

最新評論