Parancselőzmények egy PowerShell-munkamenetben

A Windows PowerShell (mint a cmd parancssor) kezdetben csak a végrehajtott parancsok előzményeit tárolja csak a jelenlegi PowerShell munkamenetben, amikor bezárja a PowerShell konzol ablakot vagy újraindítja a számítógépet, a beírt PowerShell parancsok előzményeit sehol nem menti. A bash-hoz képest ez jelentős hátrány. A Windows 10-ben bevezetett PowerShell v5 verzióban ezt a hibát kijavították.

Tartalom:

  • Parancselőzmények a PowerShell 5.0-ban, PSReadLine modul
  • Parancselőzmények törlése a PowerShell alkalmazásban
  • Importálja a PowerShell parancselőzményeit egy másik munkamenetbe

Parancselőzmények a PowerShell 5.0-ban, PSReadLine modul

Tegyük fel, hogy beír és végrehajt egy valamilyen összetett PowerShell parancsot. A Windows 10 és a Windows Server 2016 rendszerben, még a számítógép újraindítása után is, megnyithat egy új PowerShell munkamenetet, és megnyomhatja a felfelé mutató nyíl gombot. A képernyőn megjelenik az utoljára beírt parancs. Ha továbbra is megnyomja a fel gombot, látni fogja az összes korábban végrehajtott parancsot. Így a fel és le billentyűkkel görgetheti a parancsok előzményeit és végrehajthatja az előzőleg beírt parancsokat..

A PowerShell korábbi verzióiban az aktuális munkamenet parancselőzményeit a bezárás után nem mentették meg. A fel / le billentyűkkel görgetheti az aktuális munkamenet parancsának előzményeit, vagy egyszerre megjelenítheti azokat a parancsmag segítségével kap-történelem.

Részletesebb információt jeleníthet meg a korábban végrehajtott parancsokról, ideértve a parancs állapotát és kezdési / befejezési idejét:
Get-History | Format-List -Property *

A Windows 10 PowerShell alapértelmezés szerint az egyes felhasználói profilokban található szövegfájlban tárolt utolsó 4096 parancsra emlékszik

% userprofile% \ AppData \ Roaming \ Microsoft \ Windows \ PowerShell \ PSReadline \ ConsoleHost_history.txt

. Az előzményeket külön tárolják a PowerShell konzolok, az ISE külön.

A futó PowerShell-parancs csak a befejezése után kerül be az előzményekbe. Ha a PoSh parancs végrehajtása sokáig tart, akkor csak a parancs előzményeiben láthatja, amikor befejeződött..

Abban az esetben, ha nem akarja görgetni a PowerShell-parancsok teljes előzményeit, a parancs-előzmények között kereshet a billentyűparancs segítségével CTRL+R (fordított keresés) és CTRL+S (keresés előre). Nyomja meg a billentyűkombinációt, és kezdje el beírni a parancs azon részét, amelyet meg akar találni az előzőleg végrehajtott parancsokban. A parancselőzmények bármilyen helyzetben megkeresi a bevitt szöveget (ellentétben az F8 vagy a Shift + F8 által a PowerShell konzolon végzett keresésekkel, amelyek csak a sor elejétől keresik a találatokat), és a megfelelő opció ki van emelve.

megjegyzés. A PowerShell 5 parancsnaplózási funkciója nem épül be a Windows Management Frameworkbe, hanem egy harmadik fél modulján alapul. PSReadLine, jelentősen bővíti a PowerShell konzol funkcionalitását. Windows 10 rendszeren a könyvtárban található C: \ Program Files\ WindowsPowerShell\ Modulok\ PSReadline és automatikusan importálódik, amikor a PowerShell konzol elindul. A PSReadLine szintaxis kiemelést biztosít a konzolon, felelős azért, hogy a szöveget egérrel válasszák, és a CTRL + C és a CTRL + V segítségével másolja / illessze be. A PSReadLine nem része a Windows korábbi verzióihoz külön telepített PowerShell 5-nek. Így ha a végrehajtott PowerShell-parancsok energia-naplózási funkcióját az operációs rendszer korábbi verzióiban (Windows 7 / 8.1 / Windows Server 2008 / R2 / 2012R2) szeretné használni a Windows Management Framework 5.1 telepítésén kívül, akkor a PSReadLine modult a PackageManagement csomagkezelővel (korábban) kell telepítenie. OneGet) az online lerakatból:

Telepítőmodul PSReadLine

A PowerShell parancsfuttatás-előzményeinek kezelésére szolgáló PSReadLine modul-funkciók és a hozzájuk csatolt kulcsok teljes listája a parancs segítségével jeleníthető meg:

Get-PSReadlineKeyHandler | ? $ _. funkció-szerű '* hist *'

A kulcs funkció leírása
---       --------             -----------
A kulcs funkció leírása
---       --------                -----------
UpArrow PreviousHistory A bevitt adatokat cserélje ki az előző napló elemre
DownArrow NextHistory Cserélje le a bejegyzéseket a következő naplóbejegyzésre
Ctrl + R ReverseSearchHistory Az interaktív naplókeresést hátra fordítva hajtja végre
Ctrl + S ForwardSearchHistory Interaktív naplókeresést hajt végre a menetirányba
Alt + F7 ClearHistory Az összes elem törlése a parancssori naplóból (nem a PowerShell-naplóból)
F8 HistorySearchBackward Az előző naplóelem keresése, amely az aktuális bemenettel kezdődik, például P ...
Shift + F8 HistorySearchForward A következő naplóelem keresése, amely az aktuális bemenettel kezdődik, például Ne ...
Nincs korlátozás. ViSearchHistoryBackward Új naplókeresést indít hátra.
Nincs korlátozás BeginningOfHistory Ugrás az első napló elemhez
Nincs korlátozás EndOfHistory Ugrás a napló utolsó eleméhez (aktuális bemenet)

A parancselőzmények a parancsmagok használatával vannak konfigurálva kap-PSReadlineOption és készlet-PSReadlineOption. Az aktuális beállítások a következő formátumban szerezhetők be:

Get-PSReadlineOption | válasszon HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle

Érdekelhetjük a következő paraméterek beállításait:

  • HistoryNoDuplicates - Ugyanazokat a parancsokat kell megtartanom a PowerShell előzményeiben?
  • MaximumHistoryCount - mentett parancsok maximális száma (alapértelmezés szerint 4096 parancs mentésre kerül);
  • HistorySearchCursorMovesToEnd - hogy a parancs végére menjen-e keresés közben;
  • HistorySearchCaseSensitive - a keresés végrehajtásakor nagybetűkre érzékenynek kell lennie;
  • HistorySavePath - elérési út egy szövegfájlhoz, amelybe a PowerShell-parancsok előzményei kerülnek mentésre;
  • HistorySaveStyle - a mentési parancsok jellemzői:
    • SaveIncrementally - a parancsok mentésre kerülnek végrehajtás közben (alapértelmezés szerint)
    • SaveAtExit - előzmények mentése a konzol bezárásakor
    • SaveNothing - letiltja a parancselőzményeket

A PSReadLine modul beállításait a Set-PSReadlineOption paranccsal módosíthatja, például:

Set-PSReadlineOption -HistorySaveStyle SaveAtExit

Így a végrehajtott parancsok előzményeinek mentése a PowerShell 5.0-ban egy másik érv a cmd-nek a PoSh-konzol javára történő elhagyása szempontjából..

Parancselőzmények törlése a PowerShell alkalmazásban

Mint fentebb leírtuk, a PSReadline modul a PowerShell konzol összes parancsát szöveges fájlba menti. Előfordulhat azonban, hogy bizonyos esetekben a rendszergazdának különféle bizalmas információkat (hitelesítő adatokat, jelszavakat, címeket, személyes adatokat stb.) Kell beírnia a PowerShell konzolba. Így egy másik szerver adminisztrátor vagy támadó hozzáférhet a szöveges fájl adataihoz. Biztonsági okokból előfordulhat, hogy törölnie kell a PowerShell parancsnaplót, vagy teljesen le kell tiltania a parancselőzményeket.

parancsmaggal Tiszta történelem nem használható a parancsok előzményeinek törlésére, mert csak törli a korábbi parancsok listáját, amelyeket a Get-History parancsmag megjelenít.

A korábbi PoSh parancsok előzményeinek törléséhez törölnie kell azt a fájlt, amelybe mentették őket. Ennek legegyszerűbb módja a következő parancs:

Elem eltávolítása (Get-PSReadlineOption) .HistorySavePath

Ezután zárja be a PoSh munkamenetet:

Ha teljesen le szeretné tiltani a PoSh parancsok előzményeinek szöveges fájlba történő mentését, akkor futtassa a következő parancsot:

Set-PSReadlineOption -HistorySaveStyle SaveNothing

Importálja a PowerShell parancselőzményeit egy másik munkamenetbe

Bizonyos esetekben kényelmes, ha kéznél van egy vagy ugyanaz a gyakran használt PowerShell-parancsok listája a különböző számítógépeken. Exportálhatja az aktuális parancselőzményeket egy xml fájlba, és más számítógépeken is importálhatja. Ezt megteheti úgy, hogy a ConsoleHost_history.txt fájlt a szükséges számítógépek felhasználói profiljaira másolja..

Az Export-Clixml parancsmag segítségével parancsokat exportálhat az aktuális munkamenetből egy fájlba:

Get-History | Export-Clixml -C elérési út: \ ps \ Command_hist.xml

Parancsok importálása egy fájlból egy PoSh-munkamenetbe:

Kiegészítő előzmények -InputObject (Import-Clixml-C elérési út: \ ps \ Command_hist.xml)

A parancsok automatikus importálásához egy fájlba a PoSh munkamenet végén, köti a szkriptet a PoSh munkamenet vége eseményhez (!! A munkamenetnek az exit paranccsal kell véget érnie, és nem csak a PoSh ablakot kell bezárnia):

$ HistFile = Csatlakozás útja ([Környezet] :: GetFolderPath ('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action Get-History | Export-Clixml $ HistFile | out-null
if (Test-path $ HistFile) Import-Clixml $ HistFile | Add története