Powershell 迴圈
第一種迴圈
For (<Init 變數初始值>; <Condition 迴圈繼續執行條件>; <Repeat/Step 變數增減運算式>){
<Statement list>
}
例如:
設定變數 $v = 1,$a = 10
當 $v 數值小於等於 5 時,執行迴圈內指令
變數 $v 的值,每次累加 2
For ($v, $a=1,10; $v -le 5; $v = $v + 2){
"`$v = $v"
$a += $v
"`$a = $a"
}
因為要程式輸出 $,所以 $ 前面要加上 ` 跳脫符號
第二種迴圈
ForEach (<item> in <collection>){
<Statement list>
}
第三種迴圈
先判斷是否吻合條件
While (<condition){
<Statement list>
}
第四種迴圈
至少會執行一次,執行後判斷是否吻合條件,條件吻合時繼續執行
Do {
<Statement list>
} While (<condition>)
第五種迴圈
至少會執行一次,執行後判斷是否吻合條件,條件吻合時結束執行
Do {
<Statement list>
} Until (<condition>)
第六種迴圈
透過 Pipe 來源,對每個 Object 執行 Statement list
| ForEach-Object{
<Statement list>
}
$Events = Get-EventLog -LogName System -Newest 1000
$events | ForEach-Object -Begin {Get-Date} -Process {Out-File -FilePath Events.txt -Append -InputObject $_.Message} -End {Get-Date}
Get-Module -ListAvailable | ForEach-Object -MemberName Path
執行字串物件的 Split 方法,參數 “.”
"Microsoft.PowerShell.Host" | ForEach-Object -MemberName Split -ArgumentList "."
1..2 | ForEach-Object -Begin { '開始' } -Process { '程序 A' } { '程序 B' } -End { '結束' }
Begin 與 End Script Blocks 都只會執行一次,而 Process 後面可以接多個 Script Blocks,會依照傳遞物件的數量來執行次數
以下只有 Powershell v7 才有
$Message = "Output:"
1..8 | ForEach-Object -Parallel {
"$using:Message $_"
Start-Sleep 10
} -ThrottleLimit 10
採用多執行緒 -Parallel
執行緒數量 -ThrottleLimit 10
所以程式會一次把 1~8 都輸出,最後等上 10秒才結束程式
如果修改 -ThrottleLimit 為 2,就會每次只輸出兩個數值,並等上 10秒
取得系統事件紀錄(需要以管理者權限執行)
$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'
$logEntries = $logNames | ForEach-Object -Parallel {
Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5
$logEntries.Count
當使用多執行緒時,要注意系統資源使用量會拉高!
$job = 1..10 | ForEach-Object -Parallel {
"Output: $_"
Start-Sleep 3
} -ThrottleLimit 2 -AsJob
$job | Receive-Job -Wait
使用多執行緒,並丟到背景執行,然後用 Receive-Job -Wait 等待並取得執行結果
0 意見:
張貼留言