Xem lại và sử dụng vòng lặp ForEach trong tập lệnh Windows PowerShell
Khi bạn thực hiện đường ống, các lệnh trong quy trình được áp dụng cho từng đối tượng. Trong một số trường hợp, bạn có thể cần sử dụng lệnh ghép ngắn forEach-Object để xử lý dữ liệu trong quy trình. Khi bạn lưu trữ dữ liệu trong một mảng, cấu ForEach cho phép bạn xử lý từng mục trong mảng.
Cấu forEach sử dụng cú pháp sau đây:
ForEach ($user in $users) {
Set-ADUser $user -Department "Marketing"
}
Trong ví dụ trước, có một mảng có tên là $users
tượng người dùng Dịch vụ Miền Active Directory (AD DS). Hàm forEach sẽ xử lý các lệnh Windows PowerShell giữa các dấu ngoặc nhọn một lần cho mỗi đối tượng. Khi các lệnh đang được xử lý, $user
là biến có chứa mỗi mục từ mảng. Ở lần lần đọc đầu tiên, $user
chứa $users[0]
, và ở lần lần đọc thứ hai, $user
chứa $user[1]
. Điều này tiếp tục cho đến khi tất cả các khoản mục trong mảng đã được xử lý một lần.
Trong một tập lệnh, cấu ForEach là cách phổ biến nhất để xử lý các mục mà bạn đã đặt vào một mảng. Thật dễ dàng để sử dụng vì bạn không cần biết số lượng mục để xử lý chúng.
Ví dụ trước chỉ có một lệnh giữa các dấu ngoặc nhọn, nhưng bạn có thể thêm nhiều lệnh, lệnh này sẽ được xử lý cho mỗi vòng lặp. Thụt lề của các lệnh giữa các dấu ngoặc nhọn là theo quy ước để giúp kịch bản dễ xem lại hơn. Thụt lề không phải là một yêu cầu kỹ thuật, nhưng đó là một thực hành tốt.
Việc đặt tên các biến số trong vòng forEach phải có ý nghĩa. Trong hầu hết các trường hợp, bạn xác định rõ ràng biến được sử dụng trong vòng lặp như là một thể hiện duy nhất của mảng. Ví dụ, đối với mảng có tên $users
, biến được sử dụng trong vòng lặp có thể là $user
. Bạn có thể nhận thấy các ví dụ về các biến số với một chữ cái duy nhất giống với chữ cái đầu của mảng. Tuy nhiên, chỉ nên sử dụng mã này trong mã đơn giản, dễ nhận thấy chúng có liên quan.
Hiệu suất song song
Trong PowerShell 7, tham -Parallel được thêm vào lệnh ghép ngắn ForEach-Object. Điều này cho phép quy trình xử lý nhiều đối tượng cùng một lúc. Xử lý nhiều đối tượng đồng thời có thể cung cấp hiệu suất tốt hơn so với một vòng lặp forEach nhau. Bạn nên cân nhắc điều này nếu đang sử dụng PowerShell 7. Ví dụ sau đây giải thích cách sử dụng forEach-Object với tham -Parallel.
$users | ForEach-Object -Parallel { Set-ADUser $user -Department "Marketing" }
Theo mặc định, tham -Parallel cho phép xử lý năm mục cùng một lúc. Bạn có thể sửa đổi thành lớn hơn hoặc nhỏ hơn bằng cách sử dụng tham -ThrottleLimit này.