Với kịch bản ví dụ, bạn sẽ cần tạo một script PowerShell mô phỏng lệnh
CMD.EXE DIR. Bên dưới tôi sẽ giải thích các phần cốt yếu nhất trong một script.
DIR.PS1: Tiêu đề (Header)
Một script PowerShell bao gồm các lệnh PowerShell trong một file văn bản thuần
tuý với đuôi mở rộng .PS1. Thay thế DIR, bạn sẽ dùng một file text gọi là
DIR.PS1.
Để chạy script, gõ lệnh như sau ở màn hình của PowerShell:
.DIR.PS1 X:Folder
Trong đó X là ký tự phân vùng ổ (như C, D, E) và Folder là tên thư mục.
Nếu muốn biết một số thông tin về phân vùng ổ, bạn sẽ phải dùng Windows
Management Instrumentation (WMI). Chi tiết về WMI nằm ngoài phạm vi của bài
này nên chúng ta sẽ không đề cập tới ở đây. Nhưng đoạn mã PowerShell bên dưới
cũng khá dễ hiểu để không cần dùng đến trợ giúp của WMI. Bạn có thể tạo một
biến “$filter” để dùng với lệnh Get-WmiObject. Biến lọc này (tức filter) nói với
lệnh Get-WmiObject rằng bạn chỉ muốn có thông tin về một ổ đĩa cụ thể. Kết quả
của lệnh Get-WmiObject được lưu trữ ở một biến gọi là $volInfo. Nhớ rằng, trong
PowerShell mọi thứ đều là đối tượng; $volInfo bây giờ cũng là một đối tượng kết
quả trả ra từ Get-WmiObject.
$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter
Bây giờ bạn đã có thể truy cập tất cả các đối tượng và phương thức gắn với đối
tượng. Dãy số của phân vùng ổ có thể truy cập qua thuộc tính
VolumeSerialNumber. Thông tin trả về là một dãy số dạng xâu 8 ký tự. Nhưng
thường thì bạn muốn định dạng nó theo kiểu bốn số tách riêng một, cách nhau bởi
một dấu nối ngang. có thể thực hiện tương tự như ở dòng bên dưới. Dấu nối ở cuối
dòng thứ nhất là ký tự nối tiếp dòng trong PowerShell. Về cơ bản, nó chỉ nói cho
PowerShell biết rằng dòng không bị ngắt quãng mà bao gồm cả dòng tiếp theo. Khi
viết mã không cần phân tách dòng, nhưng để giảm bề rộng và để cho đoạn mã dễ
đọc, bạn nên thực hiện điều này.
$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)
Bây giờ đã có đối tượng $volInfo, bạn có thể viết thông tin header DIR cho màn
hình. Nếu ổ đĩa không có tên, đoạn text viết cho màn hình sẽ khác một chút so với
ổ đĩa có tên. Một lệnh If-Else đơn giản được dùng để kiểm tra xem thuộc tính
VolumeName có là xâu rỗng hay không. Lệnh Write-Host được dùng để viết từng
dòng lệnh cho màn hình.