感謝IT之家網(wǎng)友 莫問霜飛 的原創(chuàng)投稿
此前IT之家已經(jīng)介紹了兩篇《強大到?jīng)]朋友,Win10 PowerShell簡介》系列(請看簡介1、簡介2)文章,今天IT之家網(wǎng)友帶來第三篇了解文章。
五、外部命令
Windows有著令人驚嘆的兼容性,這是Unix系統(tǒng)和各種類Unix系統(tǒng)望塵莫及地方,PoweShell也幾乎兼容一切已經(jīng)存在的命令,這也是PowerShell強大的地方之一。與CMD一樣,PowerShell可以很容易調(diào)用并執(zhí)行外部命令,CMD自帶的命令也包括在內(nèi),而且可以Powershell提示符中啟動圖形界面的Windows程序(比如如記事本),并且可以捕獲Windows程序生成的文本,并在PowerShell中使用該文本。
1、執(zhí)行外部命令
在PowerShell誕生之前,Windows平臺上就已經(jīng)有許多程序員創(chuàng)建了數(shù)量巨大的實用命令,有些命令甚至在DOS操作系統(tǒng)時代就已經(jīng)存在了,Windows很好的繼承了下來,這是一筆巨大的寶貴財富,拋棄這些命令是十分不明智的。由于PowerShell命令有“動詞-名詞”結(jié)構(gòu)組成,雖然使命令變得簡單易懂,但也使命令變得很長,部分命令有別名也無濟于事,畢竟不是所有命令都有別名,更不可能為每一個命令創(chuàng)建一個別名。
有些PowerShell命令的功能和某些外部命令的功能是差不多,但通常外部命令比PowerShell自帶命令要短得多,所以在PowerShell命令窗口中輸入命令時,多使用與自帶命令功能相同的外部命令要大大的減少了輸入文字的數(shù)量,減輕手指負擔。
例如,使用頻率非常高的清屏命令,在CMD中是cls,在PowerShell中是Clear-Host,可以看到,Clear-Host明顯比cls長得多,好在微軟已經(jīng)把cls作為Clear-Host的內(nèi)置別名了,所以CMD和PowerShell都可以用cls來清屏。又比如,ping在CMD中也是使用頻率非常高的命令,在判斷網(wǎng)絡(luò)故障時非常有用,在PowerShell中沒有對應(yīng)的命令,有一個功能差不多的Test-Connection命令,他們都是用來判斷網(wǎng)絡(luò)連通性的命令,ping卻比Test-Connection的長度短得多,可以為Test-Connection創(chuàng)建一個簡短的別名,也可以直接在PowerShell提示符窗口中直接使用ping命令,反正它們功能差不多。
下面測試一下我和IT之家的網(wǎng)絡(luò)距離吧,大家順便看看Ping命令和Test-Connection命令的不同之處
圖1:在PowerShell中執(zhí)行ping命令測試網(wǎng)絡(luò)連通性
圖2:用Test-Connection命令測試網(wǎng)絡(luò)連通性
2、執(zhí)行外部命令要注意的地方
外部命令畢竟不是PowerShell親兒子,有時執(zhí)行外部命令時會遇到一些問題,可是會使大家困惑,接下來我為大家說明一下執(zhí)行外部命令要注意的地方,只要看完,就知道那些問題都不是個事兒。
通常遇到的問題都是外部命令的名稱與內(nèi)置別名相沖突,或者命令的語法與PowerShell語法不同造成的,解決方法也很簡單,名稱沖突就用完整的名稱,語法沖突就用PowerShell的語法,要不就干脆使用具有相同功能的PowerShell命令。
例如,sc在CMD是常用的服務(wù)有關(guān)命令,sc在PowerShell是命令Set-Content的別名,在PowerShell中使用sc會被認為是Set-Content命令,這時只要輸入完整的sc.exe命令,就能在PowerShell中正常運行了。如果想用sc命令查詢Spooler服務(wù)的狀態(tài),Spooler是打印機服務(wù),首先執(zhí)行sc query Spooler,沒有任何輸出,這是因為PowerShell把sc當作Set-Content命令的別名了,之后我執(zhí)行sc.exe query Spooler,就正常了。
圖3:使用sc命令查詢Spooler服務(wù)
有時我們從網(wǎng)絡(luò)中下載一些命令行程序,比如著名的下載工具curl命令,可以通過PowerShell執(zhí)行,明明是很簡單的事情,PowerShell偏偏就不把它做好,這里我用軟媒魔方(廣告費,謝謝)做個演示。假設(shè)我的電腦之前藍屏了,我想用軟媒藍屏助手查看原因,于是在PowerShell命令窗口中輸入bsodhelper.exe,然后PowerShell就報個錯,好像是不想執(zhí)行它,敢罷工,信不信我一口鹽汽水噴死你!
圖4:打開bsodhelper.exe報錯
CMD就從來不會有這種破事,PowerShell為什么這么麻煩?之所以會報這個錯誤,絕對不是微軟吃飽了撐的,是為了用戶安全,想想看,為了破解某個軟件,從網(wǎng)上下載一個命令行破解工具,瀏覽器不讓下載,就先找教程關(guān)了SmartScreen,下完后被Windows Defender秒刪,一氣之下接著找教程把Windows Defender干掉,費勁千辛萬苦終于把破解工具下載下來了,CMD立刻就能執(zhí)行,PowerShell卻能讓你猶豫一下,盡管可能最后你成功執(zhí)行了并破解了某軟件,但是電腦卻中毒了,于是去網(wǎng)上發(fā)帖“Windows垃圾,Windows太不安全了,下個軟件就能中毒,蘋果系統(tǒng)才是世上最好的系統(tǒng)”。相信我,這種人不但有,還絕非少數(shù)。
廢話了這么多,說說怎么才能執(zhí)行這個bsodhelper.exe,很簡單在輸入bsodhelper.exe之前,先輸入一個半角的“.”,然后打個同樣是半角的“\”,“/”也行,反正PowerShell都認,正確輸入方式:
.\bsodhelper.exe
當然還有一種辦法,就是把這個文件的完整的絕對路徑輸進去,比如我把bsodhelper.exe放在c:\PCMaster下,就直接輸入:
c:\PCMaster\bsodhelper.exe
如果以后每次都想執(zhí)行這個命令,那就請把命令所在的路徑添加到系統(tǒng)環(huán)境變量,就不細說了。
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。