Tại Sao Cần Vòng Lặp For Trong PowerShell?
PowerShell không chỉ là shell dòng lệnh — nó là môi trường scripting hoàn chỉnh. Vòng lặp For là công cụ cốt lõi để tự động hóa tác vụ lặp lại, thay thế việc gõ lệnh thủ công nhiều lần.
Ứng dụng thực tế:
- Lặp qua mảng (array) đối tượng để xử lý từng mục.
- Tạo dãy số, đếm ngược, tính toán toán học.
- Thực hiện hành động trên danh sách server, file, user...
Cú Pháp Vòng Lặp For Trong PowerShell
for (Initialization; Condition; Update)
{
Script Block
}
- Initialization: Khởi tạo biến đếm (chỉ chạy 1 lần ở đầu).
- Condition: Điều kiện tiếp tục lặp (true = lặp tiếp, false = dừng).
- Update: Cập nhật biến đếm sau mỗi vòng lặp (thường i++ hoặc i--).
- Script Block: Các lệnh thực thi trong mỗi vòng lặp.
Ví Dụ Cơ Bản: Tính Tổng Số Tự Nhiên
$n = 10
$sum = 0
for ($i = 1; $i -le $n; $i++)
{
$sum = $sum + $i
}
"The sum of $n natural numbers is $sum"
Kết quả: "The sum of 10 natural numbers is 55"
Giải thích: $i chạy từ 1 đến 10 (-le = less than or equal), cộng dồn vào $sum.
Duyệt Mảng (Array) Với Vòng Lặp For
$week = "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
for ($i = 0; $i -lt $week.Length; $i++)
{
$week[$i]
}
$week.Length= 7 (số phần tử).$itừ 0 đến 6 (-lt= less than).$week[$i]truy xuất phần tử theo chỉ số.
Vòng Lặp ForEach — Cách Ngắn Gọn Hơn Cho Mảng
PowerShell có foreach (statement) và ForEach-Object (cmdlet) đơn giản hơn cho mảng.
ForEach Statement (Khuyên Dùng Cho Mảng Đơn Giản)
foreach ($day in $week)
{
$day
}
Tự động lặp qua từng phần tử, gán vào biến $day. Không cần quản lý index.
ForEach-Object Cmdlet (Dùng Trong Pipeline)
$week | ForEach-Object { $_ }
# Hoặc xử lý phức tạp:
Get-Process | ForEach-Object { if ($_.WS -gt 100MB) { $_.Name } }
$_ đại diện cho đối tượng hiện tại trong pipeline.
So Sánh Các Loại Vòng Lặp Trong PowerShell
| Loops | Cú pháp | Đặc điểm | Khi nào dùng |
|---|---|---|---|
| for | for (init; cond; update) { } | Có init, condition, update tích hợp. Kiểm soát chính xác số lần lặp, index. | Biết trước số lần lặp, cần index, thao tác mảng phức tạp. |
| while | while (cond) { } | Kiểm tra điều kiện TRƯỚC khi lặp. Có thể không chạy lần nào nếu cond=false ngay đầu. | Không biết trước số lần, lặp cho đến khi điều kiện sai. |
| do-while | do { } while (cond) | Chạy ít nhất 1 LẦN (check condition SAU). | Cần chạy ít nhất 1 lần (menu, prompt user...). |
| do-until | do { } until (cond) | Lặp CHO ĐẾN KHI condition TRUE (ngược do-while). | Hiếm dùng, có thể thay bằng do-while + logic phủ định. |
| foreach | foreach ($item in $collection) { } | Tự động lặp qua collection, không cần index. | Duyệt mảng, list, collection đơn giản. |
Tại Sao For Loop "Tốt Hơn" Cho Scripting?
Với while/do-while, bạn phải tự khai báo biến đếm trước vòng lặp và tự tăng/giảm bên trong. Quên bước này → vô tận loop (infinite loop) — lỗi rất hay gặp.
for buộc bạn khai báo init, condition, update ngay trong ngoặc đơn → code chặt chẽ, ít bug, dễ đọc, dễ bảo trì.
Khi Nào Nên Dùng For Loop?
- Cần lặp chính xác N lần (ví dụ: tạo 100 user, ping 50 server).
- Cần index để truy xuất mảng/collection theo chỉ số.
- Logic cập nhật biến phức tạp (step không phải +1, ví dụ: $i+=2).
- Viết script automation chuyên nghiệp, tái sử dụng.
Mẹo Hay: Vòng Lặp For Với Range (PowerShell 5.0+)
# 1..10 tạo mảng 1 đến 10
foreach ($i in 1..10) { "Number: $i" }
# Hoặc dùng for với range operator
for ($i = 1; $i -le 10; $i++) { "Number: $i" }
Kết Luận
Vòng lặp for là "dao quân" trong PowerShell scripting — mạnh mẽ, linh hoạt, an toàn. Hiểu rõ cú pháp và khi nào dùng for vs foreach vs while sẽ giúp bạn viết script tự động hóa chuyên nghiệp, ít lỗi, dễ bảo trì. Hãy thực hành với các ví dụ trên ngay hôm nay!