Sau đây là cách để làm điều này, nhưng nó liên quan đến rất nhiều sự thỏa hiệp. Đầu tiên nó chỉ trong khi làm việc trong giao diện điều khiển PS, không phải là ISE, hoặc không phải trong bất kỳ ứng dụng nào lưu trữ PS. Thứ hai nó sẽ liên quan đến rất nhiều công việc, tùy thuộc vào cách, ummm, "mịn" mà bạn muốn trải nghiệm. Thứ ba, nó có thể sẽ gây ra những điều bất ngờ khác xảy ra.
Về cơ bản, bạn viết một tập lệnh cho chức năng nhắc kiểm tra bàn phím tìm kiếm cho Ctrl-R hoặc bất kỳ ký tự "hành động" nào khác. Bởi ký tự "hành động" tôi có nghĩa là một cái gì đó như nhập, tab, backspace, mũi tên lên, xuống mũi tên, vv mà gây ra một cái gì đó để xảy ra. Nếu kịch bản thấy Ctrl-R thì bạn có thể xuất ra đường dẫn đầy đủ, hoặc trong thanh tiêu đề, hoặc đến bàn điều khiển. Nếu bạn xuất nó vào giao diện điều khiển, sau đó kịch bản của bạn sẽ phải tìm ra hàng của giao diện điều khiển chứa lời nhắc hiện tại. Thành viên Rawui chứa thông tin này.
Một phác thảo trần có thể trông giống như:
do {
sleep -milli 250
if ($host.ui.rawui.keyavailable) {
$key = $host.ui.rawui.readkey()
if ($key.character -eq [char]'x') {
write-host burp
} else { break}
}
} while ($true)
Định kỳ hàng quý thứ hai kịch bản thấy nếu một chìa khóa có sẵn. Nếu vậy nó đọc chìa khóa. Nếu khóa là 'x' (ctrl-r cho bạn), nó xuất ra "ợ". Nhưng bạn sẽ thay đổi 'ợ' thành đường dẫn đầy đủ, cùng với logic để đặt thông điệp vào đúng vị trí (thanh tiêu đề hoặc hàng bên phải trên bảng điều khiển).
Nếu khóa không phải là 'x' thì ví dụ đơn giản này chỉ trả lại. Điều đó có nghĩa là 'x' bị "ăn" và chức năng 'x' không còn hoạt động cho đến khi dấu nhắc tiếp theo là đầu ra. Tuy nhiên, thay vào đó bạn có thể tự mình xử lý tất cả các phím "hành động" thay vì trả lại. Nếu nhấn mũi tên lên, bạn sẽ lấy lệnh trước đó và xuất nó ra bàn điều khiển. Nếu backarrow được nhấn, bạn sẽ xóa ký tự trước con trỏ. Nếu nhấn tab, bạn phải tương tác với lệnh hoàn thành lệnh của PS (không chắc chắn nếu có thể). Cuối cùng, khi người dùng nhấn quay trở lại, bạn cần phải cấp tất cả các khóa tạo nên dòng lệnh cho bảng điều khiển (bạn có thể sử dụng phương thức SendKeys của máy chủ WScript), hoặc bạn có thể thực thi lệnh trực tiếp từ hàm nhắc bạn, sử dụng Invoke-Expression (iex). Nếu bạn sử dụng iex lịch sử lệnh mà PS giữ (tức là get-history) sẽ không hoạt động, trừ khi bạn tìm ra cách để xử lý (có thể Add-History?). Nếu bạn sử dụng SendKeys, có khả năng ai đó gõ nhanh sẽ nhận được các nét chính của anh ấy xen kẽ với SendKeys. Là một sự thỏa hiệp, thay vì tự xử lý tất cả các phím "hành động", bạn chỉ có thể thoát khỏi dấu nhắc khi một phím bên cạnh ctrl-r được nhấn và sử dụng SendKeys để gửi một phím đó đến bàn điều khiển, để ngăn chặn char từ việc "ăn". Bằng cách đó bạn có thể có thể nhận được bởi với 20 dòng kịch bản thay vì một vài trăm, tại các chi phí của ctrl-r chỉ làm việc trước khi bất kỳ ký tự được gõ.
Một biến chứng khác. readkey() cho phép bạn nhận được cả hai phím bấm lên và lên. Vì vậy, bạn có thể hiển thị đường dẫn đầy đủ miễn là 'r' trong ctrl-r được nhấn.Tuy nhiên, tập lệnh của bạn sẽ cần phải hiểu/tắt các tổ hợp phím ở nơi khác. Điều đó có thể đơn giản như chỉ bỏ qua các phím tắt.
Có một mặt sáng sủa cho điều này. Bạn có thể thực hiện chức năng xử lý khóa hơn và cao hơn những gì PS thường làm. Vì vậy, nếu bạn muốn ctrl-t hiển thị thời gian hiện tại, bạn có thể làm điều đó. Nếu bạn muốn ctrl-w xóa từ hiện tại bên dưới con trỏ bạn có thể.