Tôi có một tập lệnh PowerShell có tên LookForFiles.ps1. Nó tìm kiếm các tệp trong một thư mục nhất định và hiển thị những tệp có kích thước lớn hơn 20K. Hiện tại kịch bản của tôi trông như thế này:

$files = Get-ChildItem C:\Temp foreach ($file in $files)

{     if ($file.length -gt 20000)

{         Write-Output $file     } }

Như bạn có thể thấy, tên thư mục của tôi (C: \ Temp) và kích thước cần kiểm tra (20000) đều được mã hóa cứng. Thay vào đó, tôi muốn chuyển vào tên và kích thước thư mục để tập lệnh của tôi linh hoạt hơn.

Đầu tiên, tôi sẽ thay đổi mọi thứ để tôi chuyển các tham số này theo vị trí, tức là, tham số đầu tiên sẽ là thư mục và tham số thứ hai sẽ là kích thước. Tập lệnh mới của tôi trông như thế này:

$files = Get-ChildItem args[0]

foreach ($file in $files)

{     if ($file.length -gt args[1])

{         Write-Output $file     } }

Bây giờ tôi gọi tập lệnh của mình và quan sát đầu ra: (Xem Hình 1.)

image

Hình 1. Truyền tham số vị trí.

Lưu ý rằng khi tôi gọi tập lệnh, tôi truyền hai tham số, viz., “C: \ Temp” và “20000”. Chúng được điền vào “$ args [0]” và “$ args [1]”

tương ứng để tập lệnh thực thi chính xác như trước. Bây giờ chúng ta hãy sửa đổi tập lệnh để nó mong đợi các tham số được đặt tên:

param([string] $dir = "C:\Temp",        [int32] $size = 20000)

$files = Get-ChildItem $dir foreach ($file in $files)

{     if ($file.length -gt $size)

{         Write-Output $file     } }

Lưu ý rằng tôi đã xóa các tham chiếu đến các biến “$ args”. Cũng lưu ý rằng dòng đầu tiên (kéo dài đến dòng thứ hai) là “param”

tuyên bố. Điều này cho PowerShell biết các tham số được đặt tên. Câu lệnh “tham số” này phải là dòng đầu tiên trong tập lệnh của bạn. Nó định nghĩa hai biến và khởi tạo chúng thành giá trị mặc định. Nó xác định biến chuỗi $ dir và đặt mặc định là “C: \ Temp” và nó xác định biến int32 (số) $ size và đặt mặc định là 20000. Những giá trị này được khởi tạo với giá trị mặc định để nếu không có tham số nào được truyền khi script được gọi, nó sẽ vẫn chạy và sử dụng các giá trị đó.

Thay cho nơi tôi từng có $ args [0], giờ tôi có biến $ dir và thay cho nơi tôi từng có $ args [1], giờ tôi có biến $ size. Hãy gọi script, chỉ định các tham số có tên này:

(Xem Hình 2.)

image

Hình 2. Truyền các tham số được đặt tên.

Bây giờ khi tập lệnh được gọi, tôi chỉ định “-dir” theo sau là thư mục mà tôi quan tâm và tôi chỉ định “-size” để chỉ ra kích thước mà tôi quan tâm. Vì đây là các tham số được đặt tên nên tôi có thể đảo ngược thứ tự của chúng. “-size” được chỉ định đầu tiên và “-dir” được chỉ định thứ hai.

Hoặc tôi có thể bỏ qua chúng hoàn toàn và các giá trị bên trong tập lệnh sẽ được sử dụng.

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