天天看點

【探索PowerShell 】【十】循環語句

PowerShell作為可程式設計性語言,擁有以下循環語句。

注:本節所要讨論的内容的實質更多的偏向于程式設計方面,是以在此不做過多詳細講解,隻針對PowerShell中的應用進行具體講解。

    • for (初值;表達式;指派語句) {代碼}          用變量值控制執行次數

    • foreach (成員變量 in 數組) {代碼}         利用疊代執行代碼

    • foreach-object                                       對一組輸入的每個對象執行運算

    • while(表達式) {代碼}                              表達式為真時循環執行代碼

    • do {代碼}  while(表達式)                         類似于while,隻是先執行代碼,再判斷表達式真假

    • do {代碼}  until(表達式)                            執行代碼,直至表達式為假

循環語句在PowerShell中的應用

利用foreach查詢硬體資訊

例一:

$DiskDrive=get-wmiobject -class Win32_DiskDrive -namespace root\CIMV2  

foreach ($item in $DiskDrive)  

{  

write-host "Description:" $item.Description  

write-host "Device ID:" $item.DeviceID  

write-host "Interface Type:" $item.InterfaceType  

write-host "Media Type:" $item.MediaType  

write-host "Model:" $item.Model  

write-host "Partitions:" $item.Partitions  

write-host "Size:" $item.Size 

write-host "Status:" $item.Status  

運作結果:

<a target="_blank" href="http://blog.51cto.com/attachment/201004/110846822.png"></a>

例二:

$Processor=get-wmiobject -class Win32_Processor -namespace root\CIMV2  

foreach ($item in $Processor)   

write-host "Caption:" $item.Caption  

write-host "CPU Status:" $item.CpuStatus  

write-host "Current Clock Speed:" $item.CurrentClockSpeed  

write-host "L2 Cache Size:" $item.L2CacheSize  

write-host "L2 Cache Speed:" $item.L2CacheSpeed  

write-host "Name:" $item.Name 

<a target="_blank" href="http://blog.51cto.com/attachment/201004/110545365.png"></a>

使用while監視程序狀态

notepad  

While(get-process -name notepad | select -Property Responding){}  

$time = get-date 

Write-Host "The Notepad failed to respond on:$time" 

在此例下,若程序notepad出現未響應,則會産生螢幕輸出。

使用do while表達:

notepad

do{} 

While(get-process -name notepad | select -Property Responding)  

利用do until進行互動

do  

{    

    "Quit Now? (Y/N)" 

    $input=Read-Host   

}  

until($input -eq "Y") 

<a target="_blank" href="http://blog.51cto.com/attachment/201004/114145736.png"></a>

使用foreach-object進行格式化輸出

對下列資料進行操作,

D00454798106276487326471李德建829.51

Q00136284503715856294375張春生712.65

H00374967692981018226574劉錫明891.31

R00759861215965098103878趙子龍898.21

J00741245626115645970139楊高遠-13.21

K00142545764587219409172周明647.41

P00103851828756182786938張龍-27.51

使之輸出為以下所示格式:

1|454798106276487326471|李德建|829.51

2|136284503715856294375|張春生|712.65

3|374967692981018226574|劉錫明|891.31

4|759861215965098103878|趙子龍|898.21

5|741245626115645970139|楊高遠|0.00

6|142545764587219409172|周明|647.41

7|103851828756182786938|張龍|0.00

        小計            |3979.09

使用foreach-object對每個資料成員使用正規表達式,最後格式化輸出即可:

${C:\test.txt} | `  

foreach-object{$total=0;$id=1}`  

    [void]($_ -match '^.{3}(?&lt;id&gt;\d+)(?&lt;name&gt;[\p{IsCJKUnifiedIdeographs}]+)(?&lt;salary&gt;[\d.]*)');  

    $ofs = '|';  

    "$($id;$id++;$matches.id;$matches.name;'{0:f2}' -f [float]$matches.salary)";  

    $total += $matches.salary  

}`  

{"`t小計`t`t|$total"} 

 運作結果:

<a target="_blank" href="http://blog.51cto.com/attachment/201004/124915953.png"></a>

     本文轉自melvillo 51CTO部落格,原文連結:http://blog.51cto.com/marui/294113,如需轉載請自行聯系原作者

繼續閱讀