Một trong những điều đầu tiên bạn làm khi học một ngôn ngữ máy tính mới là học cách nhập và xuất. Chúng tôi đã học cách thực hiện đầu ra từ mẹo liên kết: / windows-Introduction_to_PowerShell [Giới thiệu về PowerShell]. Nếu bạn nhớ, chúng tôi đã sử dụng lệnh ghép ngắn Write-Output. Bây giờ đã đến lúc học cách đọc một tệp và hiển thị đầu ra của nó ra màn hình.

Giả sử chúng ta có một tệp văn bản có tên “C: \ Temp \ Temp.txt” và nó chứa mười dòng. Cách đơn giản nhất để hiển thị những dòng này là sử dụng lệnh ghép ngắn Get-Content. Đây là những gì nó trông giống như để chạy lệnh ghép ngắn này với tệp của chúng tôi: (Xem Hình 1.)

image

Hình 1. Get-Content đọc một tệp.

Điều gì sẽ xảy ra nếu bạn chỉ muốn hiển thị ba dòng đầu tiên của tệp?

Có nhiều cách khác nhau để làm điều đó, nhưng có lẽ cách đơn giản nhất là sử dụng các biến. Trong PowerShell, một biến có thể là bất kỳ kiểu dữ liệu nào và tên biến bắt đầu bằng “$”. Ví dụ về tên biến bao gồm “$ myName”, “$ number”, “$ today”, v.v. Bạn gán giá trị cho một biến bằng dấu “=”, vì vậy lệnh PowerShell hợp pháp sẽ là

PS> $myName = 'Barry'

Với nền tảng đó, bây giờ chúng ta đủ biết để hiển thị ba dòng đầu tiên của tệp của chúng ta. Chúng tôi sẽ gán nội dung của tệp cho một biến có tên là $ lines, và sau đó hiển thị its ba dòng đầu tiên: (Xem Hình 2)

image

Hình 2. Sử dụng một biến.

Ở đây, chúng ta gán nội dung của tệp cho biến $ lines (thực chất là một mảng) và sử dụng cú pháp “[0..2]” để truy cập các phần tử 0, 1 và 2 của mảng. Phần tử 0 là dòng đầu tiên; phần tử 1 là dòng thứ hai; và phần tử 2 là dòng thứ ba.

Thật dễ dàng để truy cập các dòng cuối cùng của mảng. Điều này được thực hiện bằng cách sử dụng các chỉ số con phủ định, vì vậy $ line [-1] là dòng cuối cùng của mảng; $ line [-2] là dòng thứ hai đến dòng cuối cùng của mảng; vv Hình dưới đây cho thấy cách hiển thị ba dòng cuối cùng của tệp của chúng ta: (Xem Hình 3.)

image

Hình 3. Truy cập một mảng bằng cách sử dụng chỉ số con phủ định.

Một cách khác để lấy văn bản từ tệp là tìm kiếm nó và hiển thị kết quả. Để tìm kiếm văn bản trong PowerShell, bạn sử dụng lệnh ghép ngắn Chọn-Chuỗi. Select-String có rất nhiều nút chuyển, bạn có thể thấy nếu bạn yêu cầu trợ giúp về lệnh ghép ngắn, nhưng một biểu mẫu đơn giản yêu cầu bạn chỉ định tên tệp và mẫu bạn đang tìm kiếm. Vì vậy, nếu tôi muốn tìm tất cả các dòng trong tệp của mình có chứa văn bản “dòng” (sẽ là mọi dòng), tôi có thể làm như sau: (Xem Hình 4)

image

Hình 4. Tìm kiếm một tập tin cho một mẫu.

Select-String khá mạnh mẽ vì nó tìm kiếm bằng biểu thức chính quy. (Có một mẹo khác có tiêu đề “Giới thiệu về Biểu thức chính quy”.) Vì vậy, nếu bạn muốn tìm tất cả các dòng bắt đầu bằng “l” và kết thúc chỉ bằng một chữ số (tức là tất cả các dòng ngoại trừ dòng 10), nó sẽ giống như cái này: (Xem Hình 5.)

image

Hình 5. Tìm kiếm tệp bằng biểu thức chính quy.

Chúng ta đã nói rất nhiều về việc đọc tệp, vì vậy chúng ta nên kết thúc bằng cách nói về việc ghi tệp. Tất nhiên, bạn có thể sử dụng “>”

để chuyển hướng đầu ra của bạn đến một tệp, nhưng trong PowerShell, bạn cũng có thể sử dụng lệnh ghép ngắn Out-File để gửi đầu ra tới một tệp.

Giả sử bạn muốn nhận danh sách tất cả các quy trình đang hoạt động trên hệ thống của mình. Lệnh ghép ngắn để thực hiện việc này là Get-Process. Một phần đầu ra từ Get-Process được hiển thị ở đây: (Xem Hình 6.)

image

Hình 6. Đầu ra một phần từ Get-Process.

Lưu ý rằng dòng thứ tám từ dòng cuối cùng bị cắt bớt. Dòng đó kết thúc bằng “vmware-usbarbitrat …​”. Nếu chúng ta chỉ gửi kết quả đầu ra này đến một tệp, thì tệp đó cũng sẽ chứa dòng bị cắt bớt này. Thay vào đó, chúng ta có thể sử dụng công tắc “-width” của Out-File để cho biết rằng chúng ta muốn có chiều rộng lớn hơn để tránh bị cắt bớt. Đây là lệnh của chúng tôi để lấy các quy trình, chuyển đầu ra đến Out-File và chỉ định chiều rộng cho đầu ra:

PS C:\Bat> Get-Process | Out-File C:\Temp\Temp2.txt -width 100

Mẹo này (13507) áp dụng cho Windows 7, 8 và 10.