powershell foreach、while和其他迴圈的工作原理

學習程式設計的關鍵第一步是使用迴圈。PowerShell foreach、while和其他迴圈幫助您開發高階程式碼。...

學習編程的關鍵第一步是使用循環。謝天謝地,PowerShell將隨著您的技能不斷增長。

powershell-loops

您可以在循環中框顯每天使用的現有命令,以節省時間和精力。當你閱讀更多關於MakeUseOf的文章的重要工作時,你的腳本起著很重的作用!

powershell foreach循環:高級數據處理之門

ForEach是ForEach對象的別名。(別名只是PowerShell中命令的快捷方式。)現在是討論PowerShell處理數據的方式的好時機。

與大多數現代編程語言一樣,PowerShell也是面向對象的。PowerShell中的所有內容都是一個對象,這意味著即使變量也有擴展的屬性和函數。這就是為什麼可以將搜索設置為變量,並最終得到一個結果數組的原因。

$yourVar = Get-ChildItem *foreach ($file in $yourVar){ Your Steps}

在某些語言中,處理此數組將是一個多步驟的過程。首先,計算長度,然後計算每一步。

在PowerShell中,您單步遍歷數組並使用ForEach對每個數組執行操作。這將為您節省幾行代碼,如果您有較長的腳本,這將非常有用。例如,下面是一個小腳本,它將使用幾個Powershell ForEach循環。它會創建一個ZIP文件,其中包含30天內未打開的所有文件。

使用foreach循環構建文件歸檔系統

讓我們把臺階拆下來。您可以使用Get ChildItem來獲取Documents文件夾中的所有文件。環境變量$env:USERPROFILE運行使用當前配置文件的腳本。此變量比硬編碼路徑更便於移植。搜索結果被分配給變量$MyDocs。然後我們創建ForEach循環,讓它逐步遍歷$MyDocs中的每個$Doc。

$oldDocs = @()$MyDocs = Get-ChildItem -Path "$($env:USERPROFILE)\Documents" -Recurseforeach ($doc in $MyDocs){ if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){ $oldDocs += $doc }}$ArchiveFolder = New-Item -Path "$($env:USERPROFILE)\Documents\$((Get-Date -Format MMddyy).toString())" -ItemType Directoryforeach ($doc in $oldDocs){ Move-Item -Path $doc.FullName -Destination "$($ArchiveFolder.FullName)\$($doc.Name)" -Confirm $false}$source = $ArchiveFolder.FullName$destination = "$($env:USERPROFILE)\Documents\$($ArchiveFolder.Name).zip"Add-Type -AssemblyName "system.io.compression.filesystem"[io.compression.zipfile]::CreateFromDirectory($source, $destination)if(test-path $destination){ Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false}

在循環中,我們檢查每個文件的LastAccessTime屬性是否早於30天。我們通過get-Date cmdlet得到它,並使用AddDays函數得到負三十。如果是,則將該文件添加到$myOldDocs數組中。在文件排序完成後,我們將獲取已完成的數組並創建一個zip文件。這個過程稍微複雜一點,因為它需要調用一點.NET。如果您不太瞭解,請不要擔心--您可以從TechNet幫助文檔中竊取代碼。

分解這裡發生的事情:我們將把所有的舊文件移到一個以今天的日期命名的超過30天的新目錄中。一旦文件夾建立,我們就必須創建同名的ZIP存檔。我們將測試以確保存檔成功並且.ZIP文件存在,然後刪除新文件夾。將此設置為每月運行一次的計劃任務。這樣可以節省一些空間並保持文檔文件夾的整潔。

while和do while:循環條件

如果只想在滿足特定條件時運行循環,可以使用While循環。如果您使用一個變量來跟蹤計數,請先設置它。

i=0while(i<10){ Your Steps i+=1}

問題是,如果不使用計數器,即使測試為真,也可能希望代碼至少運行一次。下面的示例腳本就是這種情況。所以在這些情況下,您需要使用Do While循環。語法略有不同。

do{ Your Steps}while(Conditional Statement)

對於一個新手程序員來說,使用這些並不是很明顯。做典型的日常腳本,你可能不會經常碰到他們。它們特別有用的地方是**一個臨時計時器來測試流程的成功與否。

我們將構建一個快速腳本來重新啟動遠程機器,並在15分鐘內無法恢復時發出警報。這個場景假設它是一個不經常重新啟動的家庭服務器或其他機器。如果您的電腦通常運行得更快,請隨意調整時間。

重新啟動並檢查:使用do while循環

這個腳本簡單一點。首先,使用Restart Computer命令重新啟動遠程計算機。(我們在這裡為重新啟動命令使用了一個虛擬IP,請確保用您的計算機的DNS/IP覆蓋它)。然後創建計數器變量i並將其設置為0。接下來,使用Start Sleep的Do循環將腳本停止300秒(5分鐘)。第二個命令將一個添加到計數器。

Restart-Computer -ComputerName 127.0.0.1i=0do{ Start-Sleep -Seconds 300 $i += 1}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)if($i -gt 3){ Write-Ouput "Remote Machine not responding, please check."}else{ Write-Output "Reboot Succeeded"}

然後我們有了自己的標準。我們使用Or測試來確保故障生成警報。另一種方法是腳本無休止地循環等待遠程機器。為了檢查機器,我們正在使用Test-Connection cmdlet。為簡單起見,這是PowerShell的Ping。我們添加參數-Quiet,強制它返回True或False,而不是數據包的結果。Or語句的第二部分檢查計數器是否超過三個。

循環完成後,我們要創建輸出。那意味著我們需要檢查一下我們的櫃檯。這是一個快速的if/else語句。如果大於3,則腳本輸出遠程計算機沒有響應。如果不是,則輸出重新啟動成功。

其他迴路

PowerShell中還有兩種其他類型的循環可用。它們在某種程度上與前兩個循環相關,只是沒有那麼常用。For循環的工作方式類似於While示例。在評估中設置所有條件,然後設置cmdlet。

for($i = 0;$i -lt 10;$i++){ Your Steps}

Do Until循環與Do While循環類似,只需將While語句更改為Until。在示例腳本中,行為是相同的。這是一種風格選擇,但Do-While在其他情況下更具通用性。所以,如果你只記得一個,做一個更有用。

powershell foreach loops

PowerShell對每個循環都有幫助。您可以通過在get help中的循環名稱之前添加about來獲得幫助。然後您可以看到每種類型的示例和其他提示。如果你被卡住了,這些應該是有用的。

繼續和你一起成長

此時,您已經掌握了開始構建健壯腳本的大部分技能。無論是自動化您的家庭鑽機或節省時間在工作中,循環幫助您的腳本做更多。將這些循環與錯誤處理相結合,可以使腳本編寫超出基本的範圍。這為更高級的語言打開了大門。

使用循環創建的聰明PowerShell腳本是什麼?在評論中與我們分享。

  • 發表於 2021-03-11 23:17
  • 閱讀 ( 52 )
  • 分類:程式設計

你可能感興趣的文章

朗肯迴圈(rankine cycle)和布萊頓迴圈(brayton cycle)的區別

朗肯迴圈和布雷頓迴圈的關鍵區別在於朗肯迴圈是蒸汽迴圈,而布萊頓迴圈是液相和汽相之間的迴圈。 朗肯迴圈和布雷頓迴圈都是熱力學迴圈。熱力迴圈是一系列不同的熱力學過程,包括功和熱在系統內外的傳遞,具有可變...

  • 發佈於 2020-10-03 20:57
  • 閲讀 ( 58 )

打破(break)和在java中繼續(continue in java)的區別

...在程式設計中,有時需要多次重複一個語句或一組語句。迴圈用於對同一組指令進行多次迭代。迴圈的一些例子是while迴圈、do while迴圈和for迴圈。在while迴圈中,首先計算測試表達式。如果為true,則執行while迴圈中的語句。最後...

  • 發佈於 2020-10-19 05:44
  • 閲讀 ( 59 )

for迴圈(for loop)和foreach迴圈(foreach loop)的區別

關鍵區別–for迴圈與foreach迴圈 for迴圈和foreach迴圈都是用於重複語句塊的控制結構。在程式設計中有重複控制結構來反覆執行一個語句塊。一種常見的控制結構是迴路控制。for迴圈是用於迭代的控制流結構,允許程式碼重複...

  • 發佈於 2020-10-19 07:26
  • 閲讀 ( 77 )

雖然(while)和執行while迴圈(do while loop)的區別

關鍵區別–while與do while迴圈 在程式設計中,可能會有需要反覆執行語句塊的情況。大多數程式語言支援不同的控制結構,如for迴圈、while迴圈和do while迴圈來重複程式碼。迴圈允許多次執行一組語句,直到給定條件變為false。...

  • 發佈於 2020-10-19 10:58
  • 閲讀 ( 65 )

克雷布斯(krebs)和卡爾文迴圈(calvin cycle)的區別

...過程的一部分。二氧化碳和三磷酸腺苷(三磷酸腺苷)和其他一些副產物的產生都發生在細胞呼吸的整個過程中,Krebs迴圈是其中的一個重要組成部分。生物體以ATP的形式儲存能量。這個過程被稱為許多不同的名字,如檸檬酸迴...

  • 發佈於 2020-10-23 14:21
  • 閲讀 ( 104 )

對於(for)和while迴圈(while loop)的區別

對於(for)和while迴圈(while loop)的區別 程式是用程式語言編寫的執行某項任務的指令集。它可以是邏輯運算,也可以是數學運算。通常,程式中的語句一個接一個地執行。有時需要反覆執行一組語句。控制結構用於實現這一任務...

  • 發佈於 2020-10-24 02:28
  • 閲讀 ( 48 )

使用此powershell指令碼在windows中自動執行檔案加密

檔案加密和解密可以是一個工作位。但是,使用PowerShell擴充套件,可以將程序精簡為一行命令。為此,我們需要安裝Gpg4win和Powershell模組。使用指令碼,我們可以自動化檔案加密和解密過程。 ...

  • 發佈於 2021-03-13 21:58
  • 閲讀 ( 106 )

while迴圈在計算機程式設計中是如何工作的

... do while迴圈與其他迴圈有何不同?最重要的區別是do while迴圈在執行程式碼塊之後測試條件,而其他迴圈在執行程式碼塊之前檢查條件。 ...

  • 發佈於 2021-03-14 11:34
  • 閲讀 ( 43 )

幫助您快速學習的10個基本python示例

...言中的for迴圈完全不同。它在設計上更接近那些語言中的foreach迴圈。 ...

  • 發佈於 2021-03-16 13:29
  • 閲讀 ( 47 )

你今天應該掌握的5種javascript陣列方法

... 4陣列.foreach() ...

  • 發佈於 2021-03-18 11:00
  • 閲讀 ( 49 )
紅燒味的飆
紅燒味的飆

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章