Cách sử dụng tham số mặc định của PowerShell để thay đổi hành vi lệnh

Nhiều người thích sử dụng PowerShell bởi vì nó cho phép họ thực hiện những việc không thể làm với GUI của Windows. Mặc dù vậy, không thể phủ nhận rằng một số lệnh cmdlet của PowerShell có thể hơi tẻ nhạt hoặc phức tạp. Nhưng nếu có một cách để có thể chỉnh sửa những lệnh cmdlet này và kiến chúng “hành xử” theo cách bạn muốn? Dù tin hay không thì có một cách dễ dàng để thực hiện điều đó. Bạn có thể thay đổi hành vi của lệnh cmdlet bằng cách sửa đổi giá trị của các tham số mặc định PowerShell. Bài viết này sẽ hướng dẫn các bạn cách sử dụng tham số mặc định của PowerShell để thay đổi hành vi lệnh cmdlet.

Cảnh cáo

Trước khi bắt đầu, bạn cần lưu ý một số điều. Mặc dù việc thay đổi tham số mặc định PowerShell và hành vi của cmdelt rất thuận tiện nhưng có thể dẫn đến các vấn đề. Nếu bạn chạy một script và script đó giả định lệnh cmdlet đã sửa đổi sẽ hoạt động theo một cách nhất định, bạn có thể nhận được kết quả không thể đoán trước được. Do đó, bạn nên đảm bảo thay đổi tham số mặc định PowerShell một cách cẩn thận.

Đánh giá nhanh

Có hai khái niệm PowerShell mà bạn cần phải làm quen để làm việc với tham số mặc định. Khái niệm đầu tiên là biến. Trong PowerShell, tên biến luôn bắt đầu bằng ký hiệu đô la và bạn có thể viết nội dung của biến bằng cách nhập tên biến.

Khái niệm thứ hai bạn có thể đã quen thuộc đó là bảng băm. Bảng băm về cơ bản là một danh sách được tạo thành từ các cặp key/giá trị. Ví dụ, giả sử bạn muốn tạo một bảng băm chứa tên các bang nước Mỹ và chữ viết tắt của chúng. Dưới đây là code:

$StateList = @{}
$StateList.add(‘Florida’,’FL’)
$StateList.add(‘South Carolina’,’SC’)
$StateList.add(‘Georgia’,’GA’)
$StateList

Dòng đầu tiên của code tạo ra một bảng băm trống gọi là $StateList. Ba dòng tiếp theo thêm các mục vào bảng. Mỗi mục được tạo thành từ một key (tên bang) và một giá trị (chữ viết tắt của bang). Dòng cuối cùng liệt kê nội dung của bảng. Bạn có thể xem code hoạt động trong hình bên dưới.

Bảng băm tên viết tắt bang

Đây chỉ là một ví dụ rất đơn giản và có rất nhiều cách khác để sử dụng bảng băm.

Làm việc với các tham số mặc định của PowerShell

PowerShell có một biến tích hợp sẵn được sử dụng để lưu trữ các tham số mặc định được sử dụng với lệnh cmdlet của nó. Biến này được gọi là $PSDefaultParameterValues. Có thể bạn đã nhận ra từ giới thiệu ban đầu và tên của biến, đây không phải là biến thông thường mà là một bảng băm. Tuy nhiên, nếu nhập tên biến vào PowerShell, bạn sẽ thấy nhanh là bảng này trống, như hình bên dưới.

Biến $PSDefaultParameterValues

Vậy chúng ta có thể làm gì với biến $PSDefaultParameterValues này. Như đã đề cập ở trên, bạn có thể kiểm soát hành vi của lệnh cmdlet PowerShell. Điểm duy nhất là bạn không thể vượt qua khả năng vốn có của lệnh cmdlet. Do vậy, hãy xem một ví dụ.

Ví dụ này, có thể không phải là thứ bạn muốn sử dụng trong cuộc sống thực, nhưng nó sẽ cho bạn thấy cách dễ dàng để thay đổi hành vi của cmdlet một cách triệt để. Nếu nhập lệnh cmdlet Get-TimeZone trong PowerShell, bạn sẽ thấy tên của múi giờ mà PC hiện đang được cấu hình để sử dụng. Bạn có thể xem ví dụ này trong hình bên dưới.

Chạy lệnh Get-Time Zone

Bây giờ chúng ta thay đổi lệnh cmdlet này để nó không hiển thị múi giờ hệ thống được cấu hình sử dụng mà thay vào đó là các múi giờ có sẵn. Để làm điều này, chúng ta cần cú pháp của cmdlet bằng cách sử dụng lệnh cmdlet Get-Help theo sau lệnh cmdlet Get-TimeZone. Bạn có thể xem cú pháp của cmdlet bên dưới.

Cú pháp lệnh

Cú pháp này bao gồm một tham số được gọi là ListAvailable. Hãy nhập lệnh dưới đây:

$PSDefaultParameterValues.Add(“Get-TimeZone:ListAvailable”,$True)

Phần đầu tiên của lệnh này chỉ đơn giản thông báo cho PowerShell biết bạn muốn thêm một giá trị vào bảng băm, giống như đã làm với ví dụ từ viết tắt bang của Mỹ ở phần trước. Bảng băm này chứa một cặp key/giá trị. Trong trường hợp này key là tên lệnh cmdlet (Get-TimeZone) theo sau một dấu phẩy và tên của tham số bạn muốn thiết lập. Trong trường hợp này, tên tham số là ListAvailable. Phần thứ hai của lệnh cmdlet này là giá trị bạn muốn gán cho tham số. Ở đây là $True. Tham số ListAvailable thông thường không cần một giá trị, do vậy chỉ định giá trị $True là cách bạn yêu cầu PowerShell sử dụng tham số này mà không gắn giá trị cho nó.

Nếu bạn nhìn vào hình bên dưới, bạn sẽ thấy điều gì xảy ra khi chạy lệnh cmdlet Get-TimeZone.

Chạy lệnh Get-TimeZone sau khi được thay đổi

Những điều cần ghi nhớ

Điều quan trọng nhất là cần hiểu việc thêm giá trị mới cho tham số mặc định PowerShell là để thay đổi hành vi mặc định của lệnh cmdlet, không xóa khả năng của cmdlet đó. Thậm chí khi bạn thay đổi lệnh cmdlet Get-TimeZone để hiện các múi giờ có sẵn thay vì hiện múi giờ hiện tại. Bạn vẫn có thể hiển thị thông tin múi giờ hiện tại nếu xem thêm.

Một điều nữa bạn cần biết là có thể xóa tham số mặc định tùy chỉnh. Để xóa một mục duy nhất, sử dụng lệnh $PSDefaultParameterValues.Remove, theo sau bởi tên mục bạn muốn xóa. Ví dụ:

$PSDefaultParameterValues.Remove(“Get-TimeZone:ListAvailable”)

Thay vào đó, bạn có thể xóa toàn bộ nội dung của bảng băm bằng cách sử dụng lệnh này:

$PSDefaultParameterValues.Clear();

Bạn có thể xem ví dụ về cả hai kỹ thuật dưới đây:

Xóa toàn bộ nội dung bảng băm

Bạn có thể xóa toàn bộ bảng băm hoặc xóa một mục duy nhất.

Thay đổi hành vi mặc định của lệnh cmdlet là điều bạn không thường làm nhưng khi cần bạn đã biết cách thay đổi rồi đó.

Chúc các bạn thực hiện thành công!

Xem thêm:

Thứ Tư, 20/06/2018 14:44
51 👨 463
0 Bình luận
Sắp xếp theo
    ❖ Windows 10