PowerShell能干什么呢?就像序言中提到的那樣,PowerShell首先是個(gè)Shell,定義好了一堆命令與操作系統,特別是與文件系統交互,能夠啟動(dòng)應用程序,甚至操縱應用程序;第二,PowerShell允許將幾個(gè)命令組合起來(lái)放到文件里執行,實(shí)現文件級的重用,也就是說(shuō)有腳本的性質(zhì);第三,PowerShell能夠能夠充分利用.Net類(lèi)型和COM對象,來(lái)簡(jiǎn)單地與各種系統交互,完成各種復雜的、自動(dòng)化的操作。
一、與文件系統交互、運行應用程序
就像在Dos中一樣,在PowerShell的交互界面上鍵入"dir"并回車(chē),會(huì )顯示當前文件夾下的子文件夾和文件信息。
PS D:\Projects\Practise\PowerShell> dir Directory: D:\Projects\Practise\PowerShellMode LastWriteTime Length Name---- ------------- ------ ----d---- 1/23/2013 12:35 PM d1d---- 1/23/2013 12:35 PM d2-a--- 1/21/2013 8:38 PM 36314 alias.tx-a--- 1/21/2013 8:32 PM 241530 cmdlets.-a--- 1/18/2013 10:18 AM 888 errors.t |
像這樣的命令很多,比如echo "Hello", cd ..等等。從這里看來(lái)它就是一個(gè)命令行,實(shí)現了原來(lái)命令行的功能。但PowerShell是命令行的加強版嗎,是命令行的超集嗎?這個(gè)真不是,以后會(huì )專(zhuān)門(mén)說(shuō)這個(gè)問(wèn)題。
就像在命令行里運行應用程序一樣,可以在PowerShell的交互窗口中運行應用程序,如下:
PS C:\Users\v-lukez> notepadPS C:\Users\v-lukez> |
如果想更好地控制應用程序,可以使用start命令,如下:
PS C:\Users\v-lukez> start notepad -WindowStyle MaximizedPS C:\Users\v-lukez> |
以上結果可以實(shí)現Notepad窗口的最大化。其實(shí)類(lèi)似的命令還有很多,而且更多的參數意味著(zhù)更精細地控制。
二、創(chuàng )建腳本
任務(wù)的自動(dòng)化是以程序文件或者可執行腳本文件為基礎的,PowerShell也支持將命令列表做成腳本文件來(lái)執行。以下是Hello.ps1腳本文件的內容:
$a = "Hello"$aecho $a > a.txtdir a.txt |
Hello.ps1腳本文件的執行情況結果如下:
PS E:\> D:\Projects\Practise\PowerShell\Hello.ps1Hello Directory: E:\Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/30/2013 4:56 PM 16 a.txt |
你可能發(fā)現了,PowerShell腳本文件是以.PS1為擴展名的。以上這個(gè)腳本非常簡(jiǎn)單:先定義了一個(gè)變量,然后輸出這個(gè)變量的結果,再將這個(gè)變量的值寫(xiě)入文件a.txt,最后輸出這個(gè)文件的屬性信息。僅從這一點(diǎn)看,PowerShell腳本很像Batch文件。但是實(shí)際上,PowerShell可以做得更多。
PowerShell腳本支持自定義函數,就像我們在編程語(yǔ)言中做得那樣。funcDemo.ps1給出了一個(gè)在PowerShell腳本中編寫(xiě)函數的示例:
#funcDemo.ps1function SayHello ($name){ echo "hello $name"}SayHello "Luke" |
腳本的運行結果是“Hello Luke”。
此外,關(guān)于PowerShell腳本內部語(yǔ)句的運行順序,這里要做個(gè)簡(jiǎn)單說(shuō)明:除了函數定義,腳本中的命令或者函數調用(其實(shí)也相當于執行命令)會(huì )順序執行;函數中的語(yǔ)句只有在函數被調用的時(shí)候才會(huì )被執行。
三、利用.Net類(lèi)型和COM對象
能夠利用.Net類(lèi)型和COM對象是PowerShell的最大特點(diǎn),這讓PowerShell能夠最大限度的利用現有資源,并且很容易把.Net和COM程序員招徠到自己麾下。
簡(jiǎn)單類(lèi)型:
[int]$a = 10 [String]$b = 10 |
.Net類(lèi)型
$Message = new-object Net.Mail.MailMessage("me@source.com","you@destination.com", "Subject", <br> "Here is some email") |
COM對象
$myWord = new-object -comobject Word.Application |
創(chuàng )建了.Net或者COM的對象以后,就可以利用這些對象的屬性和方法,來(lái)完成更加復雜的操作。
作為本篇結束,用一句話(huà)總結,PowerShell吃得很少,干活很多,是Windows管理員日常必備的工具之一。走過(guò)路過(guò),千萬(wàn)不要錯過(guò)啊。。。
聯(lián)系客服