डिफ़ॉल्ट रूप से Windows PowerShell (साथ ही कमांड प्रॉम्प्ट) केवल वर्तमान PowerShell सत्र में निष्पादित कमांड के इतिहास को सहेजता है। जब आप पावरशेल कंसोल विंडो को बंद करते हैं या अपने कंप्यूटर को पुनरारंभ करते हैं, तो आपके द्वारा टाइप किए गए पावरशेल कमांड का इतिहास कहीं भी सहेजा नहीं जाता है। बैश की तुलना में, यह एक महत्वपूर्ण कमी है। पावरशेल 5.0 . से शुरू हो रहा है विंडोज 10 (विंडोज सर्वर 2016) में पेश किया गया, पीएस कंसोल में दर्ज सभी कमांड अब डिफ़ॉल्ट रूप से एक सादे टेक्स्ट लॉग फ़ाइल में सहेजे गए हैं।
पावरशेल 5.0 और नए में कमांड इतिहास
मान लीजिए आपने कुछ जटिल पावरशेल कमांड टाइप और निष्पादित किया है। विंडोज 10 और विंडोज सर्वर 2016 में, कंप्यूटर को पुनरारंभ करने के बाद भी, आप एक नया पावरशेल सत्र खोल सकते हैं और ऊपर तीर कुंजी दबा सकते हैं। आपके द्वारा दर्ज किया गया अंतिम आदेश स्क्रीन पर प्रदर्शित होना चाहिए। यदि आप "अप" कुंजी दबाते रहते हैं, तो आप पहले से निष्पादित सभी कमांड देखेंगे। इस प्रकार, “ऊपर तीर
. कुंजियों का उपयोग करते हुए ” और “नीचे तीर
” आप PoS कमांड के इतिहास को स्क्रॉल कर सकते हैं और पहले टाइप किए गए कमांड को फिर से निष्पादित कर सकते हैं।
अप
का उपयोग करना /नीचे
कुंजियाँ, आप केवल वर्तमान PS सत्र के कमांड इतिहास को स्क्रॉल कर सकते हैं या गेट-इतिहास का उपयोग करके पूरे कमांड इतिहास को सूचीबद्ध कर सकते हैं। cmdlet. आप वर्तमान पावरशेल सत्र में पहले निष्पादित कमांड के बारे में अधिक विस्तृत जानकारी प्रदर्शित कर सकते हैं, जिसमें कमांड स्थिति और प्रारंभ/समाप्ति/अवधि समय शामिल है:
गेट-हिस्ट्री | प्रारूप-सूची-संपत्ति *
डिफ़ॉल्ट रूप से, विंडोज 10 में पावरशेल पिछले 4096 कमांड को सहेजता है जो प्रत्येक उपयोगकर्ता %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt की प्रोफाइल में स्थित एक सादे टेक्स्ट फ़ाइल में संग्रहीत होते हैं।
।
इतिहास को PowerShell और PowerShell ISE के लिए अलग से संग्रहीत किया जाता है।
यदि किसी PowerShell कमांड को निष्पादित होने में लंबा समय लगता है, तो आप उसे केवल कमांड इतिहास में उसके पूर्ण होने पर ही देखेंगे।
cmd.exe में, आप वर्तमान सत्र में कमांड इतिहास को निम्न के साथ प्रदर्शित कर सकते हैं:
डोस्की /इतिहास
एफ7
कुंजी का उपयोग cmd इतिहास के माध्यम से खोजने के लिए किया जाता है।
पावरशेल कमांड इतिहास कैसे खोजें?
यदि आप ऊपर/नीचे तीरों का उपयोग करके संपूर्ण पावरशेल कमांड इतिहास को स्क्रॉल नहीं करना चाहते हैं, तो आप कीबोर्ड शॉर्टकट CTRL+R का उपयोग करके कमांड इतिहास खोज सकते हैं। (रिवर्स सर्च) और CTR +S (आगे की खोज)। कुंजी संयोजन दबाएं और उस कमांड का हिस्सा टाइप करना शुरू करें जिसे आप पहले से निष्पादित कमांड में खोजना चाहते हैं। आपके द्वारा दर्ज किया गया पाठ किसी भी स्थिति में कमांड इतिहास में मिलेगा (F8
का उपयोग करके PowerShell में खोज के विपरीत) या Shift+F8
, जो केवल लाइन की शुरुआत से मैचों को देखने की अनुमति देता है)। पावरशेल कंसोल को खोज स्ट्रिंग के अनुरूप पिछला कमांड प्रदर्शित करना चाहिए। कमांड में लाइन मैच हाइलाइट किए गए हैं।
यदि पाया गया आदेश आपको सूट नहीं करता है, तो इतिहास के माध्यम से खोज जारी रखने के लिए, CTRL+R
दबाएं /CTRL+S
फिर। परिणामस्वरूप, खोज पैटर्न के अनुरूप निम्न कमांड स्क्रीन पर दिखाई देगा।
F8
. का उपयोग करना कुंजी, आप इतिहास में वह आदेश पा सकते हैं जो वर्तमान कमांड लाइन पर पाठ से मेल खाता है। उदाहरण के लिए, प्राप्त करें-
दर्ज करें और F8
press दबाएं . इस टेक्स्ट से मेल खाने वाले कमांड हिस्ट्री में आखिरी एंट्री मिलेगी। इतिहास में अगले कमांड पर जाने के लिए F8
press दबाएं फिर से।
आप #
. का भी उपयोग कर सकते हैं कमांड इतिहास के माध्यम से खोजने के लिए चरित्र। उदाहरण के लिए, Get-WMI with से शुरू होने वाली अंतिम कमांड को खोजने के लिए , टाइप करें #get-wmi
और टैब
दबाएं चाभी। पैटर्न से मेल खाने वाला अंतिम कमांड कंसोल में दिखाई देगा:
कमांड इतिहास क्लासिक विंडोज पावरशेल और नए पावरशेल कोर दोनों में समान रूप से काम करता है (यदि आपने अपना पीओएसएच संस्करण पहले ही अपग्रेड कर लिया है)।
Notepad.exe विंडो में पिछले PoSh कमांड की सूची प्राप्त करने के लिए, कमांड चलाएँ:
नोटपैड (Get-PSReadLineOption | चयन करें -ExpandProperty HistorySavePath)
इतिहास में किसी क्वेरी से मेल खाने वाले आदेशों की सूची प्रदर्शित करने के लिए, आप इसका उपयोग कर सकते हैं:
गेट-हिस्ट्री | चयन-स्ट्रिंग -पैटर्न "प्राप्त करें-"
PSReadLine मॉड्यूल के साथ PowerShell कमांड इतिहास को प्रबंधित करना
PowerShell 5.0 में कमांड इतिहास कार्यक्षमता स्वयं Windows प्रबंधन फ्रेमवर्क में नहीं बनाई गई है, बल्कि यह तृतीय-पक्ष PSReadLine पर आधारित है। मॉड्यूल, जो पावरशेल कंसोल की कार्यक्षमता को महत्वपूर्ण रूप से बढ़ाता है। PSReadLine कंसोल में सिंटैक्स को हाइलाइट करता है, यह आपके माउस के साथ टेक्स्ट के चयन और CTRL+C
का उपयोग करके इसे कॉपी/पेस्ट करने के लिए ज़िम्मेदार है। और CTRL+V
. विंडोज 10 में यह मॉड्यूल C:\Program Files\WindowsPowerShell\Modules\PSReadline में स्थित है। फ़ोल्डर और स्वचालित रूप से आयात किया जाता है जब PowerShell कंसोल प्रारंभ होता है।
PSReadLine विंडोज के पिछले संस्करणों के लिए स्टैंडअलोन पावरशेल 5.0 (या कभी नहीं) इंस्टॉलर में शामिल नहीं है। इस प्रकार, यदि आप पिछले Windows संस्करणों (Windows 7/8.1 और Windows Server 2008R2/2012R2) में PowerShell कमांड इतिहास कार्यक्षमता का उपयोग करना चाहते हैं, तो Windows प्रबंधन फ्रेमवर्क 5.1 को स्थापित करने के अलावा, आपको PackageManagement मॉड्यूल के माध्यम से PSReadLine मॉड्यूल स्थापित करने की आवश्यकता होगी (पूर्व में वनगेट) कमांड का उपयोग करके ऑनलाइन रिपॉजिटरी से:
इंस्टॉल-मॉड्यूल PSReadLine
पावरशेल में कमांड इतिहास के प्रबंधन के लिए PSReadLine मॉड्यूल के कार्यों की एक पूरी सूची और उन्हें सौंपी गई कुंजियों को कमांड के साथ प्रदर्शित किया जा सकता है:
प्राप्त करें-PSReadlineKeyHandler | ? {$_.फंक्शन -लाइक '*हिस्ट*'}
कमांड इतिहास को Get-PSReadlineOption . का उपयोग करके कॉन्फ़िगर किया जा सकता है और सेट-PSReadlineOption सीएमडीलेट। वर्तमान PSReadline सेटिंग्स को इस कमांड का उपयोग करके देखा जा सकता है:
प्राप्त करें-PSReadlineOption | हिस्ट्रीनोडुप्लीकेट्स, मैक्सिममहिस्ट्रीकाउंट, हिस्ट्रीसर्चकर्सरमूव्सटूएंड, हिस्ट्रीसर्चकेस सेंसिटिव, हिस्ट्रीसेवपाथ, हिस्ट्रीसेव स्टाइल चुनें।
निम्नलिखित PSReadline मापदंडों की सेटिंग्स हमारे लिए महत्वपूर्ण हो सकती हैं:
- इतिहासNoDuplicates - निर्धारित करता है कि समान कमांड को सहेजना है या नहीं;
- अधिकतम इतिहास गणना - संग्रहीत आदेशों की अधिकतम संख्या (डिफ़ॉल्ट रूप से अंतिम 4096 आदेश सहेजे जाते हैं);
- HistorySearchCursorMovesToEnd — निर्धारित करता है कि खोज करते समय आपको कमांड के अंत तक जाना है या नहीं;
- HistorySearchCaseSensitive - निर्धारित करता है कि क्या खोज केस संवेदनशील है (PS कमांड इतिहास डिफ़ॉल्ट रूप से केस संवेदनशील नहीं है);
- इतिहास सेवपाथ - उस फ़ाइल का पथ दिखाता है जिसमें कमांड संग्रहीत है;
- इतिहास सेव स्टाइल - आदेशों को सहेजने की ख़ासियत निर्धारित करता है:
- बढ़ते रूप से सहेजें — कमांड चलाने के बाद सहेजे जाते हैं (डिफ़ॉल्ट रूप से);
- SaveAtExit — PowerShell कंसोल बंद होने पर इतिहास सहेजा जाता है;
- कुछ नहीं बचाएं - कमांड इतिहास को सहेजना अक्षम करें।
आप सेट-PSReadlineOption . का उपयोग करके PSReadLine मॉड्यूल की सेटिंग बदल सकते हैं . उदाहरण के लिए:
सेट-PSReadlineOption -HistorySaveStyle SaveAtExit
लॉग फ़ाइल में सहेजे गए PowerShell कमांड की संख्या बढ़ाने के लिए, कमांड चलाएँ:
सेट-PSReadlineOption -MaximumHistoryCount 10000
इसलिए, निष्पादित पावरशेल कमांड के इतिहास को सहेजने की क्षमता PoSh कंसोल को cmd पर प्राथमिकता देने के तर्कों में से एक है।
पावरशेल कंसोल इतिहास कमांड कैसे साफ़ करें?
जैसा कि हमने ऊपर बताया, PSReadline मॉड्यूल सभी PowerShell कंसोल कमांड को टेक्स्ट फ़ाइल में सहेजता है। हालाँकि, कुछ मामलों में, व्यवस्थापक को PowerShell कंसोल (क्रेडेंशियल्स, पासवर्ड, पते, व्यक्तिगत डेटा, आदि) में विभिन्न संवेदनशील जानकारी दर्ज करनी होती है। इस प्रकार, कोई अन्य सर्वर व्यवस्थापक या हमलावर एक सादे पाठ फ़ाइल में इतिहास डेटा तक पहुंच सकता है। सुरक्षा कारणों से, आपको निष्पादित पावरशेल कमांड के इतिहास को साफ़ करने या कमांड इतिहास को पूरी तरह से अक्षम करने की आवश्यकता हो सकती है।
साफ़-इतिहास cmdlet का उपयोग केवल वर्तमान पावरशेल सत्र के इन-मेमोरी कमांड इतिहास को साफ़ करने के लिए किया जा सकता है। यह केवल पिछले आदेशों की सूची को साफ़ करता है जो Get-History cmdlet प्रदर्शित करता है।
आप इतिहास से केवल एक पिछली कमांड को हटा सकते हैं:
क्लियर-इतिहास -गणना 1-नवीनतम
या एक विशिष्ट पैटर्न के साथ सभी आदेश साफ़ करें:क्लियर-इतिहास -कमांडलाइन *सेट-विज्ञापन*
पिछले पावरशेल कमांड के इतिहास को पूरी तरह से साफ़ करने के लिए, आपको कंसोलहोस्ट_हिस्टोरी.txt फ़ाइल को हटाना होगा, जिसमें वे PSReadline मॉड्यूल द्वारा लिखे गए हैं। आप वर्तमान पावरशेल इतिहास फ़ाइल स्थान प्राप्त कर सकते हैं और इसे कमांड से हटा सकते हैं:
निकालें-आइटम (Get-PSReadlineOption).HistorySavePath
उसके बाद, पावरशेल कंसोल विंडो बंद करें।
यदि आप किसी टेक्स्ट फ़ाइल में पावरशेल कमांड के इतिहास को सहेजना पूरी तरह से अक्षम करना चाहते हैं, तो कमांड चलाएँ:
सेट-PSReadlineOption -HistorySaveStyle SaveNothing
किसी अन्य सत्र में PowerShell कमांड इतिहास को निर्यात/आयात कैसे करें?
कभी-कभी विभिन्न कंप्यूटरों पर अक्सर उपयोग किए जाने वाले पावरशेल कमांड का एक ही सेट होना सुविधाजनक होता है। आप अपने कंप्यूटर पर वर्तमान कमांड इतिहास को एक xml फ़ाइल में निर्यात कर सकते हैं और इसे अन्य कंप्यूटरों में आयात कर सकते हैं। साथ ही यह कंसोलहोस्ट_हिस्ट्री.txt फ़ाइल को वांछित कंप्यूटर पर उपयोगकर्ता प्रोफ़ाइल में कॉपी करके किया जा सकता है।
मौजूदा सत्र से फ़ाइल में कमांड निर्यात करने के लिए, आप Export-Clixml
. का उपयोग कर सकते हैं सीएमडीलेट:
गेट-हिस्ट्री | Export-Clixml -Path c:\ps\commands_hist.xml
एक फ़ाइल से दूसरे PoSh सत्र (स्थानीय या किसी अन्य कंप्यूटर पर) में कमांड इतिहास आयात करने के लिए:
ऐड-इतिहास -इनपुटऑब्जेक्ट (आयात-क्लिक्सएमएल-पथ c:\ps\commands_hist.xml)
PowerShell सत्र के अंत में एक फ़ाइल में स्वचालित रूप से पिछले आदेशों को निर्यात करने के लिए, आप स्क्रिप्ट को PoSh सत्र समाप्ति घटना से बाँध सकते हैं (!! सत्र आवश्यक रूप से निकास
के साथ समाप्त होना चाहिए। आदेश, केवल PowerShell विंडो को बंद करने के बजाय):
$HistFile =Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | एक्सपोर्ट-क्लिक्सएमएल $HistFile } | out-null
if (टेस्ट-पथ $HistFile) {आयात-Clixml $HistFile | ऐड-हिस्ट्री }