Hãy nhớ đọc các bài viết trước trong loạt bài này:
- Tìm hiểu cách tự động hóa Windows bằng PowerShell
- Học cách sử dụng Cmdlets trong PowerShell
- Học cách sử dụng các đối tượng trong PowerShell
- Học cách định dạng, lọc và so sánh trong PowerShell
- Tìm hiểu cách sử dụng Remoting trong PowerShell
- Sử dụng PowerShell để lấy thông tin máy tính
Và hãy theo dõi phần còn lại của loạt phim trong tuần.
Sử dụng Cmdlets Batch
Trước đó trong loạt bài này, khi chúng tôi giới thiệu cho bạn đường dẫn, chúng tôi đã chỉ cho bạn cách bạn có thể lấy các đối tượng mà một lệnh ghép ngắn xuất ra và chuyển chúng thành đầu vào cho một lệnh ghép ngắn khác bằng cách sử dụng một cái gì đó như sau:
Get-Process -Name notepad | Stop-Process
Điều này sẽ giết chết bất kỳ quá trình với tên "notepad". Nhưng có thể bạn sẽ tự hỏi PowerShell có thể giết mọi cá thể của notepad bằng một lệnh đơn lẻ như thế nào. Câu trả lời nằm trong sự trợ giúp của lệnh ghép ngắn Stop-Process.
help Stop-Process –Full
Nếu bạn nhìn vào dòng cuối cùng của mã trong phần cú pháp, bạn có thể thấy tham số InputObject chấp nhận một đối tượng kiểu Process , và bất cứ khi nào bạn thấy một kiểu theo sau là hai dấu ngoặc vuông như vậy, nó có nghĩa là tham số chấp nhận một hoặc nhiều của loại trước. Trong trường hợp này, nó chấp nhận một hoặc nhiều đối tượng quy trình. Về mặt kỹ thuật, chúng ta sẽ nói rằng lệnh ghép ngắn InputObject chấp nhận một tiến trình mảng. Bất cứ khi nào bạn có một lệnh ghép ngắn hỗ trợ các hoạt động theo cách này, hãy sử dụng nó. Đây là lựa chọn số một.
Sử dụng WMI
Mặc dù WMI không phải là công nghệ tốt nhất để xuất xưởng từ Microsoft HQ, nhưng nó lại đứng thứ hai trong danh sách về cách làm việc với các bộ sưu tập các đối tượng. Chúng ta có thể dễ dàng có được một danh sách các tiến trình đang chạy từ lớp Win32_Process như sau:
Get-WmiObject –Class Win32_Process
Get-WmiObject –Class Win32_Process | Get-Member
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
Đếm
Không có hai phương thức khác, nếu bạn phải làm điều gì đó với một loạt các đối tượng, bạn có thể liệt kê toàn bộ đối tượng và hành động trên từng đối tượng riêng lẻ. Trước tiên, bạn phải tìm phương pháp bạn sẽ sử dụng để ngăn chặn một quá trình duy nhất.
Get-Process | Get-Member -MemberType Method
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
Tóm lược
Lựa chọn thứ nhất
Get-Process -Name notepad | Stop-Process
Lựa chọn thứ hai
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
Lựa chọn ba
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
Đó là tất cả cho những người lần này, gặp bạn vào tuần tới để có thêm nhiều niềm vui cho PowerShell.