PowerShell入門教程之Cmd命令與PowerShell命令相互調(diào)用的方法
單獨使用一種腳本來完成一項任務(wù)是理想的狀態(tài),而現(xiàn)實的情況往往是,因為歷史原因、或者團隊組成,你不得不將多種腳本或者程序組合在一起,來完成某項任務(wù)。本文的討論范圍是Cmd命令與PowerShell命令之間的組合與調(diào)用。
毋庸置疑,Cmd命令與PowerShell命令之間的調(diào)用有兩個方向。即在Cmd命令中調(diào)用PowerShell的命令,以及在PowerShell腳本中調(diào)用Cmd命令。需要說明的是,這里的調(diào)用分兩個層次:一、簡單的在其中一個的環(huán)境中執(zhí)行另外一個命令,完成部分工作;二、在其中一個的執(zhí)行上下文中調(diào)用另一個的命令,并根據(jù)返回結(jié)果來選擇后面的邏輯。
在Cmd命令中調(diào)用PowerShell命令
如果只是在Cmd命令中調(diào)用PowerShell的命令,而不需要記錄PowerShell的返回結(jié)果,是非常簡單的??梢灾苯釉贑md命令或者腳本中執(zhí)行類似一下命令:
powershell echo "Hello"
執(zhí)行上述命令的時候,Cmd是把PowerShell當(dāng)成一個應(yīng)用程序來執(zhí)行的。
在Cmd命令中調(diào)用PowerShell的命令并獲得返回值的可行方法并不多。這是因為,Cmd命令對于結(jié)果的處理往往需要借助于文件讀寫,很少有機會在各個命令之間傳遞數(shù)據(jù),并保存中間結(jié)果的。For命令是其中最好的一個方法,它的指向方法如下:
for /f %i in ('powershell echo "Hello"') do (set a=%i)
以上命令的執(zhí)行結(jié)果是%a%被賦值為Hello。當(dāng)然,如果只是簡單賦值,就沒有必要這樣大費周折。調(diào)用PowerShell的命令,肯定是看中了它強大的編程能力,比如自定義的排序等等。
我遇到的一個實際的例子是這樣的:文件服務(wù)器上有一個目錄,里邊放著一些按年月命名的目錄。因為這個目錄結(jié)構(gòu)已經(jīng)確定下來了,而且很多組都在使用,不能隨便改動。我們有一個任務(wù)就是每天定時去最新的年月目錄里拷貝build。麻煩的是,第一、文件夾時按照12.1、12.2。。。12.10、12.11、12.12、13.1。。。這樣命名的;第二、從時間上沒法找,因為最新的目錄不是在月底,而是在月中的某一天生成的。以Cmd命令有限的編程能力,肯定是不好解決這個問題的。我最終寫了一個PowerShell的腳本文件,在Cmd的腳本中調(diào)用,終于解決了這個問題。
在PowerShell命令中調(diào)用Cmd命令
由于PowerShell強大的管道功能,在PowerShell命令或者腳本中調(diào)用Cmd命令并獲得返回結(jié)果是件很容易的事情,是否獲得結(jié)果對于調(diào)用Cmd命令的方式也沒有影響。請看如下示例:
cmd /c dir
$a = (cmd /c dir)
$a
以上示例中,第1行的執(zhí)行結(jié)果,和后兩行的執(zhí)行結(jié)果是一樣的。不同點是,后者的執(zhí)行結(jié)果被保存了下來,前者只是將結(jié)果打印在屏幕上。
為什么需要在PowerShell中調(diào)用Cmd命令呢(既然PowerShell有如此強大的Shell以及編程特性)?其實原因也很簡單。在PowerShell之前我們有很多很好用的Cmd命令、工具和控制臺程序,如果完全丟棄他們并使用PowerShell重寫的話,那絕對是浪費。要知道,能夠利用最小的改變來高效地完成任務(wù),才是我們的目標。
結(jié)語
一個新的語言,如果不能與已有的資源兼容和溝通,那么它注定不能成為大眾的選擇(也許可能在小眾中流行),最終將被遺棄和忘記。PowerShell與現(xiàn)有系統(tǒng)良好溝通性有目共睹,從它與Cmd命令的關(guān)系可見一斑。
相關(guān)文章
PowerShell腳本實現(xiàn)網(wǎng)卡DHCP自動獲取IP地址、設(shè)置靜態(tài)IP地址的方法
這篇文章主要介紹了PowerShell腳本實現(xiàn)網(wǎng)卡DHCP自動獲取IP地址、設(shè)置靜態(tài)IP地址的方法,本文同時講解了用PowerShell設(shè)置網(wǎng)卡DHCP、靜態(tài)IP的方法,需要的朋友可以參考下2014-08-08
PowerShell Out-File向只讀文件寫入內(nèi)容的方法
這篇文章主要介紹了PowerShell Out-File向只讀文件寫入內(nèi)容的方法,只需要加一個-Force參數(shù)即可,需要的朋友可以參考下2014-08-08
Powershell在一個會話中只允許執(zhí)行指定命令的方法
這篇文章主要介紹了Powershell在一個會話中只允許執(zhí)行指定命令的方法,使用本文的技巧可以達到控制權(quán)限的功能,需要的朋友可以參考下2014-11-11
類似rpm包管理器的Windows Installer PowerShell Module簡介
前兩篇文章分享了使用PowerShell安裝Window程序的一些技巧。但是都是基于兼容已有命令行的調(diào)用。今天分享一個第三方組件,讓你直接可以使用Cmdlet命令來查詢,安裝,修復(fù)Windows程序2014-05-05

