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