निम्नलिखित ऐसा करने का एक तरीका है, लेकिन इसमें बहुत से समझौता शामिल हैं। सबसे पहले यह केवल पीएस कंसोल में काम करते समय आईएसई नहीं, या पीएस होस्ट करने वाले किसी भी एप्लीकेशन में नहीं। दूसरा, यह कितना काम करेगा, इस पर निर्भर करता है कि, ummm, "चिकनी" आप अनुभव चाहते हैं। तीसरा, यह शायद अन्य अप्रत्याशित सामान होने का कारण बन जाएगा।
मूल रूप से आप उस त्वरित फ़ंक्शन के लिए एक स्क्रिप्ट लिखते हैं जो कुंजीपटल को Ctrl-R या किसी अन्य "क्रिया" वर्ण के लिए देखता है। "एक्शन" कैरेक्टर से मेरा मतलब है एंटर, टैब, बैकस्पेस, अप-एरो, डाउन-एरो इत्यादि जैसे कुछ ऐसा होता है जो कुछ घटित होता है। यदि स्क्रिप्ट Ctrl-R को देखती है तो आप टाइटल बार में या कंसोल में पूर्ण पथ आउटपुट कर सकते हैं। यदि आप इसे कंसोल पर आउटपुट करते हैं, तो आपकी स्क्रिप्ट को यह पता लगाना होगा कि कंसोल की कौन सी पंक्ति में वर्तमान प्रॉम्प्ट है। राउई सदस्य में यह जानकारी है।
एक नंगे रूपरेखा लग सकता है जैसे:
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)
हर तिमाही दूसरे पटकथा देखता है, तो एक चाबी उपलब्ध है। यदि ऐसा है तो यह कुंजी पढ़ता है। यदि कुंजी 'x' है (आपके लिए ctrl-r) तो यह "burp" आउटपुट करता है। लेकिन आप संदेश को सही जगह पर रखने के लिए तर्क के साथ 'burp' को पूर्ण पथ में बदल देंगे (शीर्षक पट्टी या कंसोल पर दायां पंक्ति)।
यदि कुंजी 'x' नहीं है तो यह सरल उदाहरण बस लौटाता है। इसका मतलब है कि 'x' को "खाया जाता है" और 'x' कार्यक्षमता तब तक काम नहीं करती जब तक कि अगला संकेत आउटपुट न हो। हालांकि आप बदले में सभी "एक्शन" कुंजियों को अपने आप संभालने के बजाय स्वयं को संभाल सकते हैं। यदि ऊपर-तीर दबाया जाता है तो आप पिछले कमांड को पुनर्प्राप्त करेंगे और इसे कंसोल पर आउटपुट करेंगे। यदि बैकरो दबाया जाता है तो आप कर्सर से पहले चरित्र को हटा देंगे। यदि टैब दबाया जाता है तो आपको पीएस के अंतर्निर्मित कमांड पूर्ण होने के साथ बातचीत करना होगा (सुनिश्चित नहीं है कि यह संभव है)। आदि
आखिरकार जब उपयोगकर्ता रिटर्न दबाता है, तो आपको कंसोल पर कमांड लाइन बनाने वाली सभी कुंजियों को खिलाना होगा (आप WScript होस्ट की SendKeys विधि का उपयोग कर सकते हैं), या आप निष्पादित कर सकते हैं Invoke-Expression (iex) का उपयोग करके सीधे आपसे तुरंत कार्य करें। यदि आप आईईएक्स कमांड इतिहास का उपयोग करते हैं जो पीएस रखता है (यानी इतिहास प्राप्त करें) काम नहीं करेगा, जब तक कि आप इसे संभालने का कोई तरीका न समझें (शायद ऐड-हिस्ट्री?)। यदि आप SendKeys का उपयोग करते हैं तो एक मौका है कि कोई व्यक्ति तेजी से टाइप करने से अपने मुख्य स्ट्रोक को SendKeys से अलग कर देगा।
समझौता के रूप में, सभी "एक्शन" कुंजियों को स्वयं संभालने के बजाय, आप केवल प्रॉम्प्ट से बाहर निकल सकते हैं जब ctrl-r के अलावा एक कुंजी दबाया जाता है और charK को रोकने के लिए कंसोल में एक कुंजी भेजने के लिए SendKeys का उपयोग करता है "खाया" पाने से। इस तरह आप शायद कुछ सौ के बजाय स्क्रिप्ट की 20 लाइनों के साथ प्राप्त कर सकते हैं, ctrl-r की कीमत पर केवल किसी भी अक्षर टाइप किए जाने से पहले काम कर सकते हैं।
एक और जटिलता। readkey() आपको नीचे और ऊपर कीस्ट्रोक दोनों प्राप्त करने की अनुमति देता है। तो जब तक ctrl-r में 'r' दबाया जाता है तब तक आप पूर्ण पथ प्रदर्शित कर सकते हैं।हालांकि आपकी स्क्रिप्ट को कहीं और कीस्ट्रोक को ऊपर/नीचे समझने की आवश्यकता होगी। यह नीचे कीस्ट्रोक को अनदेखा करने के समान सरल हो सकता है।
इसके लिए एक उज्ज्वल पक्ष है। आप पीएस सामान्य रूप से क्या करता है इसके ऊपर और ऊपर कुंजी-हैंडलिंग कार्यक्षमता लागू कर सकते हैं। तो अगर आप वर्तमान समय को दिखाने के लिए ctrl-t चाहते थे, तो आप ऐसा कर सकते थे। यदि आप कर्सर के नीचे वर्तमान शब्द को हटाने के लिए ctrl-w चाहते थे तो आप कर सकते थे।