ডিফল্টরূপে Windows PowerShell (সেসাথে কমান্ড প্রম্পট) শুধুমাত্র বর্তমান PowerShell সেশনে কার্যকর করা কমান্ডের ইতিহাস সংরক্ষণ করে। আপনি যখন PowerShell কনসোল উইন্ডোটি বন্ধ করেন বা আপনার কম্পিউটার পুনরায় চালু করেন, তখন আপনি টাইপ করা PowerShell কমান্ডের ইতিহাস কোথাও সংরক্ষিত হয় না। ব্যাশের সাথে তুলনা করে, এটি একটি উল্লেখযোগ্য অপূর্ণতা। PowerShell 5.0 দিয়ে শুরু Windows 10 (Windows Server 2016) এ প্রবর্তিত, PS কনসোলে প্রবেশ করা সমস্ত কমান্ড এখন ডিফল্টরূপে একটি প্লেইন টেক্সট লগ ফাইলে সংরক্ষিত হয়।
PowerShell 5.0 এবং পরবর্তীতে কমান্ড ইতিহাস
ধরুন আপনি কিছু জটিল PowerShell কমান্ড টাইপ করেছেন এবং কার্যকর করেছেন। Windows 10 এবং Windows Server 2016-এ, কম্পিউটার রিস্টার্ট করার পরেও, আপনি একটি নতুন PowerShell সেশন খুলতে পারেন এবং উপরের তীর কী টিপুন। আপনার প্রবেশ করা শেষ কমান্ডটি স্ক্রিনে প্রদর্শিত হওয়া উচিত। আপনি যদি "আপ" কী টিপতে থাকেন, আপনি দেখতে পাবেন যে সমস্ত কমান্ড আগে কার্যকর হয়েছে। এইভাবে, কী ব্যবহার করে “Up arrow
” এবং “Down arrow
” আপনি PoSh কমান্ডের ইতিহাসের মাধ্যমে স্ক্রোল করতে পারেন এবং পূর্বে টাইপ করা কমান্ডগুলি পুনরায় কার্যকর করতে পারেন।
up
ব্যবহার করে /down
কী, আপনি শুধুমাত্র বর্তমান PS সেশনের কমান্ড ইতিহাসের মাধ্যমে স্ক্রোল করতে পারেন বা Get-History ব্যবহার করে সমগ্র কমান্ড ইতিহাস তালিকাভুক্ত করতে পারেন cmdlet। আপনি বর্তমান PowerShell সেশনে পূর্বে সম্পাদিত কমান্ড সম্পর্কে আরও বিস্তারিত তথ্য প্রদর্শন করতে পারেন, কমান্ডের স্থিতি এবং শুরু/শেষ/সময়কাল সহ:
Get-History | Format-List -Property *
ডিফল্টরূপে, Windows 10-এ PowerShell শেষ 4096 কমান্ড সংরক্ষণ করে যা প্রতিটি ব্যবহারকারীর প্রোফাইলে অবস্থিত একটি প্লেইন টেক্সট ফাইলে সংরক্ষিত থাকে %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
.
ইতিহাস PowerShell এবং PowerShell ISE-এর জন্য আলাদাভাবে সংরক্ষণ করা হয়।
যদি একটি PowerShell কমান্ড কার্যকর হতে দীর্ঘ সময় নেয়, আপনি এটি সম্পূর্ণ হলেই শুধুমাত্র কমান্ড ইতিহাসে দেখতে পাবেন।
cmd.exe-এ, আপনি বর্তমান সেশনে কমান্ড ইতিহাস প্রদর্শন করতে পারেন:
doskey /history
F7
cmd ইতিহাস অনুসন্ধান করতে কী ব্যবহার করা হয়।
কিভাবে PowerShell কমান্ড ইতিহাস অনুসন্ধান করবেন?
আপনি যদি উপরে/নীচের তীরগুলি ব্যবহার করে সমগ্র PowerShell কমান্ড ইতিহাসের মাধ্যমে স্ক্রোল করতে না চান, আপনি কীবোর্ড শর্টকাট CTRL+R ব্যবহার করে কমান্ড ইতিহাস অনুসন্ধান করতে পারেন। (বিপরীত অনুসন্ধান) এবং CTR +S (আগামী অনুসন্ধান)। কী সংমিশ্রণ টিপুন এবং কমান্ডের অংশ টাইপ করা শুরু করুন যা আপনি পূর্বে কার্যকর করা কমান্ডগুলিতে খুঁজে পেতে চান। আপনি যে পাঠ্যটি প্রবেশ করেছেন তা যেকোনো অবস্থানে কমান্ড ইতিহাসে পাওয়া যাবে (F8
ব্যবহার করে পাওয়ারশেলে অনুসন্ধানের বিপরীতে অথবা Shift+F8
, যা শুধুমাত্র লাইনের শুরু থেকে ম্যাচগুলি দেখার অনুমতি দেয়)। PowerShell কনসোল সার্চ স্ট্রিং এর সাথে সম্পর্কিত পূর্ববর্তী কমান্ড প্রদর্শন করা উচিত। কমান্ডে লাইনের মিলগুলি হাইলাইট করা হয়েছে৷
যদি পাওয়া কমান্ডটি আপনার পক্ষে উপযুক্ত না হয়, ইতিহাসের মাধ্যমে অনুসন্ধান চালিয়ে যেতে, CTRL+R
টিপুন /CTRL+S
আবার ফলস্বরূপ, অনুসন্ধান প্যাটার্নের সাথে সম্পর্কিত নিম্নলিখিত কমান্ডটি পর্দায় উপস্থিত হবে৷
F8
ব্যবহার করে কী, আপনি ইতিহাসে কমান্ডটি খুঁজে পেতে পারেন যা বর্তমান কমান্ড লাইনের পাঠ্যের সাথে মেলে। উদাহরণস্বরূপ, get-
লিখুন এবং F8
টিপুন . এই পাঠ্যের সাথে মিলে যাওয়া কমান্ড ইতিহাসের শেষ এন্ট্রি পাওয়া যাবে। ইতিহাসের পরবর্তী কমান্ডে যেতে F8
টিপুন আবার।
এছাড়াও আপনি #
ব্যবহার করতে পারেন কমান্ড ইতিহাসের মাধ্যমে অনুসন্ধান করার জন্য অক্ষর। উদাহরণস্বরূপ, Get-WMI দিয়ে শুরু হওয়া শেষ কমান্ডটি খুঁজতে , #get-wmi
টাইপ করুন এবং Tab
টিপুন মূল. প্যাটার্নের সাথে মিলে যাওয়া শেষ কমান্ডটি কনসোলে প্রদর্শিত হবে:
কমান্ড ইতিহাস ক্লাসিক Windows PowerShell এবং নতুন PowerShell কোর উভয় ক্ষেত্রেই একই কাজ করে (যদি আপনি ইতিমধ্যে আপনার PoSh সংস্করণ আপগ্রেড করে থাকেন)।
Notepad.exe উইন্ডোতে পূর্ববর্তী PoSh কমান্ডের একটি তালিকা পেতে, কমান্ডটি চালান:
notepad (Get-PSReadLineOption | select -ExpandProperty HistorySavePath)
কোয়েরির সাথে মেলে এমন ইতিহাসে কমান্ডের একটি তালিকা প্রদর্শন করতে, আপনি ব্যবহার করতে পারেন:
Get-History | Select-String -Pattern "Get-"
PSReadLine মডিউল সহ PowerShell কমান্ড ইতিহাস পরিচালনা করা
PowerShell 5.0-এ কমান্ড ইতিহাস কার্যকারিতা নিজেই Windows ম্যানেজমেন্ট ফ্রেমওয়ার্কের মধ্যে তৈরি করা হয়নি, তবে তা তৃতীয় পক্ষের PSReadLine-এর উপর ভিত্তি করে মডিউল, যা উল্লেখযোগ্যভাবে PowerShell কনসোলের কার্যকারিতা প্রসারিত করে। PSReadLine কনসোলে সিনট্যাক্স হাইলাইট করে, এটি আপনার মাউস দিয়ে পাঠ্য নির্বাচন এবং CTRL+C
ব্যবহার করে অনুলিপি/পেস্ট করার জন্য দায়ী। এবং CTRL+V
. Windows 10-এর এই মডিউলটি C:\Program Files\WindowsPowerShell\Modules\PSReadline -এ অবস্থিত ফোল্ডার এবং PowerShell কনসোল শুরু হলে স্বয়ংক্রিয়ভাবে আমদানি করা হয়।
PSReadLine Windows এর পূর্ববর্তী সংস্করণগুলির জন্য স্বতন্ত্র PowerShell 5.0 (বা কখনই নয়) ইনস্টলারের মধ্যে অন্তর্ভুক্ত নয়। সুতরাং, যদি আপনি Windows ম্যানেজমেন্ট ফ্রেমওয়ার্ক 5.1 ইনস্টল করার পাশাপাশি পূর্ববর্তী উইন্ডোজ সংস্করণে (Windows 7/8.1 এবং Windows Server 2008R2/2012R2) PowerShell কমান্ড ইতিহাস কার্যকারিতা ব্যবহার করতে চান, তাহলে আপনাকে প্যাকেজ ম্যানেজমেন্টের মাধ্যমে PSReadLine মডিউল ইনস্টল করতে হবে। কমান্ড ব্যবহার করে অনলাইন সংগ্রহস্থল থেকে (পূর্বে OneGet):
Install-Module PSReadLine
PowerShell-এ কমান্ডের ইতিহাস পরিচালনার জন্য PSReadLine মডিউলের ফাংশনগুলির একটি সম্পূর্ণ তালিকা এবং তাদের জন্য নির্ধারিত কীগুলি কমান্ডের সাথে প্রদর্শিত হতে পারে:
Get-PSReadlineKeyHandler | ? {$_.function -like '*hist*'}
Key Function Description --- -------- ----------- UpArrow PreviousHistory Replace the input with the previous item in the history DownArrow NextHistory Replace the input with the next item in the history Ctrl+r ReverseSearchHistory Search history backwards interactively Ctrl+s ForwardSearchHistory Search history forward interactively Alt+F7 ClearHistory Remove all items from the command line history (not PowerShell history) F8 HistorySearchBackward Search for the previous item in the history that starts with the current input - like NextHistory if the input is empty Shift+F8 HistorySearchForward Search for the next item in the history that starts with the current input - like NextHistory if the input is empty Unbound ViSearchHistoryBackward Starts a new seach backward in the history. Unbound BeginningOfHistory Move to the first item in the history Unbound EndOfHistory Move to the last item (the current input) in the history
কমান্ড ইতিহাস Get-PSReadlineOption ব্যবহার করে কনফিগার করা যেতে পারে এবং Set-PSReadlineOption cmdlets বর্তমান PSReadline সেটিংস এই কমান্ড ব্যবহার করে দেখা যেতে পারে:
Get-PSReadlineOption | select HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle
নির্বাচন করুন
নিম্নলিখিত PSReadline প্যারামিটারের সেটিংস আমাদের জন্য গুরুত্বপূর্ণ হতে পারে:
- HistoryNoDuplicates - একই কমান্ড সংরক্ষণ করতে হবে কিনা তা নির্ধারণ করে;
- MaximumHistoryCount - সংরক্ষিত কমান্ডের সর্বাধিক সংখ্যা (ডিফল্টরূপে শেষ 4096টি কমান্ড সংরক্ষিত হয়);
- HistorySearchCursorMovesToEnd — অনুসন্ধান করার সময় আপনাকে কমান্ডের শেষে যেতে হবে কিনা তা নির্ধারণ করে;
- ইতিহাস অনুসন্ধান কেস সংবেদনশীল৷ – অনুসন্ধান কেস সংবেদনশীল কিনা তা নির্ধারণ করে (PS কমান্ড ইতিহাস ডিফল্টরূপে কেস সংবেদনশীল নয়);
- HistorySavePath৷ - ফাইলের পথ দেখায় যেখানে কমান্ডটি সংরক্ষণ করা হয়;
- ইতিহাস সেভ স্টাইল - কমান্ড সংরক্ষণের বিশেষত্ব নির্ধারণ করে:
- ক্রমবর্ধমানভাবে সংরক্ষণ করুন — কমান্ডগুলি চালানোর পরে সংরক্ষণ করা হয় (ডিফল্টরূপে);
- SaveAtExit — PowerShell কনসোল বন্ধ হলে ইতিহাস সংরক্ষিত হয়;
- কিছুই সংরক্ষণ করুন৷ — কমান্ড ইতিহাস সংরক্ষণ অক্ষম করুন।
আপনি Set-PSReadlineOption ব্যবহার করে PSReadLine মডিউলের সেটিংস পরিবর্তন করতে পারেন . যেমন:
Set-PSReadlineOption -HistorySaveStyle SaveAtExit
লগ ফাইলে সংরক্ষিত PowerShell কমান্ডের সংখ্যা বাড়াতে, কমান্ডটি চালান:
Set-PSReadlineOption -MaximumHistoryCount 10000
সুতরাং, এক্সিকিউটেড পাওয়ারশেল কমান্ডের ইতিহাস সংরক্ষণ করার ক্ষমতা হল PoSh কনসোলকে cmd-এ পছন্দ করার যুক্তিগুলির মধ্যে একটি৷
কিভাবে PowerShell কনসোল ইতিহাস কমান্ড সাফ করবেন?
যেমনটি আমরা উপরে ব্যাখ্যা করেছি, PSReadline মডিউল সমস্ত PowerShell কনসোল কমান্ড একটি টেক্সট ফাইলে সংরক্ষণ করে। যাইহোক, কিছু ক্ষেত্রে, অ্যাডমিনিস্ট্রেটরকে PowerShell কনসোলে বিভিন্ন সংবেদনশীল তথ্য লিখতে হয় (প্রমাণপত্র, পাসওয়ার্ড, ঠিকানা, ব্যক্তিগত ডেটা, ইত্যাদি)। সুতরাং, অন্য সার্ভার অ্যাডমিনিস্ট্রেটর বা আক্রমণকারী একটি প্লেইন টেক্সট ফাইলে ইতিহাস ডেটা অ্যাক্সেস করতে পারে। নিরাপত্তার কারণে, আপনাকে কার্যকর করা PowerShell কমান্ডের ইতিহাস মুছে ফেলতে হতে পারে বা কমান্ড ইতিহাস সম্পূর্ণরূপে নিষ্ক্রিয় করতে হতে পারে।
ক্লিয়ার-ইতিহাস cmdlet শুধুমাত্র বর্তমান PowerShell সেশনের ইন-মেমরি কমান্ড ইতিহাস সাফ করতে ব্যবহার করা যেতে পারে। এটি শুধুমাত্র পূর্ববর্তী কমান্ডের তালিকা সাফ করে যা Get-History cmdlet প্রদর্শন করে।
আপনি ইতিহাস থেকে শুধুমাত্র একটি পূর্ববর্তী কমান্ড সরাতে পারেন:
Clear-History -count 1 -newest
অথবা একটি নির্দিষ্ট প্যাটার্ন দিয়ে সমস্ত কমান্ড সাফ করুন:Clear-History -CommandLine *set-ad*
পূর্ববর্তী PowerShell কমান্ডের ইতিহাস সম্পূর্ণরূপে মুছে ফেলার জন্য, আপনাকে ConsoleHost_history.txt ফাইলটি মুছে ফেলতে হবে যেখানে সেগুলি PSReadline মডিউল দ্বারা লেখা হয়েছে। আপনি বর্তমান PowerShell ইতিহাস ফাইলের অবস্থান পেতে পারেন এবং কমান্ড দিয়ে এটি সরাতে পারেন:
Remove-Item (Get-PSReadlineOption).HistorySavePath
এর পরে, পাওয়ারশেল কনসোল উইন্ডোটি বন্ধ করুন।
আপনি যদি একটি টেক্সট ফাইলে PowerShellcommands এর ইতিহাস সংরক্ষণ সম্পূর্ণরূপে অক্ষম করতে চান, তাহলে কমান্ডটি চালান:
Set-PSReadlineOption -HistorySaveStyle SaveNothing
কিভাবে PowerShell কমান্ড ইতিহাস অন্য একটি সেশনে রপ্তানি/আমদানি করবেন?
কখনও কখনও বিভিন্ন কম্পিউটারে প্রায়শই ব্যবহৃত পাওয়ারশেল কমান্ডের একই সেট থাকা সুবিধাজনক। আপনি একটি xml ফাইলে আপনার কম্পিউটারে বর্তমান কমান্ড ইতিহাস রপ্তানি করতে পারেন এবং অন্যান্য কম্পিউটারে আমদানি করতে পারেন। এছাড়াও এটি পছন্দসই কম্পিউটারে ব্যবহারকারী প্রোফাইলে ConsoleHost_history.txt ফাইলটি অনুলিপি করে করা যেতে পারে।
বর্তমান সেশন থেকে একটি ফাইলে কমান্ড রপ্তানি করতে, আপনি Export-Clixml
ব্যবহার করতে পারেন cmdlet:
Get-History | Export-Clixml -Path c:\ps\commands_hist.xml
একটি ফাইল থেকে অন্য PoSh সেশনে কমান্ড ইতিহাস আমদানি করতে (স্থানীয় বা অন্য কম্পিউটারে):
Add-History -InputObject (Import-Clixml -Path c:\ps\commands_hist.xml)
একটি PowerShell সেশনের শেষে একটি ফাইলে পূর্ববর্তী কমান্ডগুলি স্বয়ংক্রিয়ভাবে রপ্তানি করতে, আপনি PoSh সেশন সমাপ্তি ইভেন্টে স্ক্রিপ্টটি আবদ্ধ করতে পারেন (!! সেশনটি অবশ্যই exit
দিয়ে শেষ করতে হবে কমান্ড, শুধুমাত্র PowerShell উইন্ডো বন্ধ করার পরিবর্তে):
$HistFile = Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistFile } | out-null
if (Test-path $HistFile) { Import-Clixml $HistFile | Add-History }