Định dạng, lọc và so sánh học tập của Geek trong PowerShell
Trong phiên bản này của Geek School, chúng tôi xem xét định dạng, lọc và so sánh các đối tượng trong Đường ống.
Hãy chắc chắn đọc các bài viết trước trong loạt bài:
- Tìm hiểu cách tự động hóa Windows với 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
Và theo dõi phần còn lại của loạt bài cả tuần.
Định dạng mặc định
Khi tôi mới bắt đầu với PowerShell, tôi đã nghĩ mọi thứ đều kỳ diệu, nhưng sự thật là chỉ cần một chút thời gian để hiểu những gì đang diễn ra bên dưới mui xe. Điều này cũng đúng với hệ thống định dạng PowerShell. Trong thực tế, nếu bạn chạy lệnh ghép ngắn Get-Service, đầu ra được tạo chỉ hiển thị cho bạn 3 thuộc tính: Trạng thái, Tên và DisplayName.
Nhưng nếu bạn chuyển Get-Service thành Get-Member, bạn sẽ thấy rằng các đối tượng ServiceContoder có nhiều thứ hơn là chỉ ba thuộc tính này, vậy thì chuyện gì đang xảy ra?
Câu trả lời nằm trong một tệp ẩn xác định cách thức hầu hết các lệnh ghép ngắn tích hợp hiển thị đầu ra của chúng. Để hiểu rõ, nhập nội dung sau vào shell và nhấn enter.
notepad C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Nếu chúng tôi sử dụng chức năng Tìm của notepad, chúng tôi có thể nhanh chóng chuyển sang phần chi tiết đầu ra của lệnh ghép ngắn Get-Service bằng cách tìm kiếm loại ServiceContoder.
Đột nhiên, bạn có thể thấy bên dưới mui xe PowerShell đang định dạng bất kỳ đối tượng nào trong Đường ống thuộc loại ServiceContoder và tạo một bảng có ba cột: Status, Name và DisplayName. Nhưng điều gì sẽ xảy ra nếu loại bạn đang xử lý không có mục trong tệp đó hoặc bất kỳ tệp định dạng nào khác cho vấn đề đó? Vậy thì, nó thực sự khá đơn giản. Nếu đối tượng đi ra khỏi đường ống có 5 thuộc tính trở lên, PowerShell sẽ hiển thị tất cả các thuộc tính của đối tượng trong danh sách; nếu nó có ít hơn 5 thuộc tính, nó sẽ hiển thị chúng trong một bảng.
Định dạng dữ liệu của bạn
Nếu bạn không hài lòng với định dạng mặc định của một đối tượng hoặc loại, bạn có thể cuộn định dạng của riêng bạn. Có ba lệnh ghép ngắn bạn cần biết để làm điều này.
- Danh sách định dạng
- Bảng định dạng
- Định dạng rộng
Định dạng rộng chỉ cần lấy một tập hợp các đối tượng và hiển thị một thuộc tính duy nhất của mỗi đối tượng. Theo mặc định, nó sẽ tìm một thuộc tính tên; nếu các đối tượng của bạn không chứa thuộc tính name, nó sẽ sử dụng thuộc tính đầu tiên của đối tượng một khi các thuộc tính đã được sắp xếp theo thứ tự abc.
Nhận dịch vụ | Định dạng rộng
Như bạn có thể thấy, nó cũng mặc định là hai cột, mặc dù bạn có thể chỉ định cả thuộc tính nào bạn muốn sử dụng, cũng như có bao nhiêu cột bạn muốn được hiển thị.
Nhận dịch vụ | Format-Wide -Property DisplayName -Column 6
Nếu một cái gì đó được định dạng dưới dạng bảng theo mặc định, bạn luôn có thể chuyển nó sang dạng xem danh sách bằng cách sử dụng lệnh ghép ngắn Format-List. Chúng ta hãy xem đầu ra của lệnh ghép ngắn Get-Process.
Chế độ xem dạng bảng này thực sự rất phù hợp với loại thông tin này, nhưng hãy giả vờ rằng chúng tôi muốn xem nó ở dạng danh sách. Tất cả chúng ta thực sự phải làm là dẫn nó đến Danh sách định dạng.
Nhận-Quá trình | Danh sách định dạng
Như bạn có thể thấy, chỉ có bốn mục được hiển thị trong danh sách theo mặc định. Để xem tất cả các thuộc tính của đối tượng, bạn có thể sử dụng ký tự đại diện.
Nhận-Quá trình | Định dạng-Danh sách -Property *
Ngoài ra, bạn có thể chọn chỉ các thuộc tính bạn muốn.
Nhận-Quá trình | Danh sách định dạng -Pperty, id
Bảng định dạng, mặt khác, lấy dữ liệu và biến nó thành một bảng. Vì dữ liệu của chúng tôi từ Get-Process đã ở dạng bảng, chúng tôi có thể sử dụng nó để dễ dàng chọn các thuộc tính mà chúng tôi muốn hiển thị trong bảng. Tôi đã sử dụng tham số AutoSize để làm cho tất cả dữ liệu vừa với một màn hình.
Nhận-Quá trình | Tên bảng định dạng, id -AutoSize
Lọc và so sánh
Một trong những điều tốt nhất về việc sử dụng một đường ống dựa trên đối tượng là bạn có thể lọc các đối tượng ra khỏi đường ống ở bất kỳ giai đoạn nào bằng cách sử dụng lệnh ghép ngắn Where-Object.
Nhận dịch vụ | Where-Object $ _. Status -eq Hồi Chạy
Sử dụng nơi đối tượng thực sự rất đơn giản. $ _ đại diện cho đối tượng đường ống hiện tại, từ đó bạn có thể chọn một thuộc tính mà bạn muốn lọc. Ở đây, chỉ giữ các đối tượng trong đó thuộc tính Status bằng với Chạy. Có một vài toán tử so sánh bạn có thể sử dụng trong khối tập lệnh lọc:
- eq (bằng)
- neq (Không bằng)
- gt (Lớn hơn)
- ge (Lớn hơn hoặc bằng)
- lt (ít hơn)
- le (Ít hơn hoặc bằng)
- thích (Kết hợp chuỗi ký tự đại diện)
Một danh sách đầy đủ và nhiều thông tin hơn có thể được xem trong tệp trợ giúp về khái niệm about_comparison, tuy nhiên phải mất một thời gian để làm quen với cú pháp Where-Obeject. Đó là tất cả cho lần này!