Zgodovina ukazov v PowerShell seji

Sprva Windows PowerShell (podobno kot ukazna vrstica cmd) shrani zgodovino izvedenih ukazov samo v trenutni seji PowerShell, ko zaprete okno konzole PowerShell ali znova zaženete računalnik, zgodovina ukazov PowerShell, ki ste jih vnesli, ni nikjer shranjena. V primerjavi z bashom je to pomembna pomanjkljivost. V PowerShell v5, predstavljenem v sistemu Windows 10, je bila ta napaka odpravljena.

Vsebina:

  • Zgodovina ukazov v PowerShell 5.0, PSReadLine modul
  • Brisanje zgodovine ukazov v PowerShellu
  • Uvozite zgodovino ukazov PowerShell v drugo sejo

Zgodovina ukazov v PowerShell 5.0, PSReadLine modul

Predpostavimo, da vtipkate in izvedete nekakšen zapleten ukaz PowerShell. V sistemih Windows 10 in Windows Server 2016 lahko tudi po ponovnem zagonu računalnika odprete novo sejo PowerShell in pritisnete tipko s puščico navzgor. Na zaslonu se prikaže zadnji ukaz, ki ste ga vnesli. Če še naprej pritisnete tipko gor, boste videli vse ukaze, izvedene prej. Tako lahko s tipkami navzgor in navzdol listate po zgodovini ukazov in znova izvajate prej vnesene ukaze.

V prejšnjih različicah PowerShell zgodovina ukazov v trenutni seji ni bila shranjena po zaključku. S tipkami navzgor / navzdol se lahko pomaknete po zgodovini ukazov v trenutni seji ali jih hkrati izpišete z ukazom cmdlet Pridite-Zgodovina.

Prikažete lahko podrobnejše informacije o predhodno izvedenih ukazih, vključno s statusom in začetnim / končnim časom ukaza:
Get-Zgodovina | Format-Seznam-lastnost *

PowerShell v sistemu Windows 10 privzeto zapomni zadnjih 4096 ukazov, shranjenih v besedilni datoteki, ki se nahaja v profilu vsakega uporabnika

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

. Zgodovina se hrani ločeno za konzolo PowerShell, ločeno za ISE.

Teče ukaz PowerShell v zgodovino vstopi šele po zaključku. Če ukaz PoSh traja dolgo, ga boste videli v zgodovini ukazov šele, ko je dokončan..

Če se ne želite pomikati po celotni zgodovini ukazov PowerShell, lahko poiščete zgodovino ukazov s pomočjo bližnjice na tipkovnici. CTRL+R (povratno iskanje) in CTRL+S (iskanje naprej). Pritisnite kombinacijo tipk in začnite tipkati del ukaza, ki ga želite najti v predhodno izvedenih ukazih. Zgodovina ukazov bo vneseno besedilo iskala na katerem koli mestu (za razliko od iskanja v konzoli PowerShell s tipko F8 ali Shift + F8, ki iščejo tekme od začetka vrstice) in označena je ustrezna možnost.

Opomba. Funkcija beleženja ukazov v PowerShell 5 ni vgrajena v sam sistem upravljanja Windows, ampak temelji na modulu drugega proizvajalca PSReadLine, bistveno razširi funkcionalnost konzole PowerShell. V operacijskem sistemu Windows 10 je v imeniku C: \ Program Datoteke\ WindowsPowerShell\ Moduli\ PSReadline in se samodejno uvozi, ko se zažene konzola PowerShell. PSReadLine zagotavlja poudarjanje skladenj v konzoli, odgovoren je za možnost uporabe besedila z miško in kopiranje / lepljenje z uporabo CTRL + C in CTRL + V. PSReadLine ni del posebej nameščenega PowerShell 5 za prejšnje različice sistema Windows. Če želite uporabiti funkcionalnost za vzdrževanje zgodovine izvedenih ukazov PowerShell v prejšnjih različicah OS (Windows 7 / 8.1 / Windows Server 2008 / R2 / 2012R2) poleg namestitve Windows Management Framework 5.1, boste morali namestiti modul PSReadLine s pomočjo upravitelja paketov PackageManagement (prej OneGet) iz spletnega skladišča z ukazom:

Namestite-modul PSReadLine

Popoln seznam funkcij modula PSReadLine za upravljanje zgodovine izvajanja ukazov v PowerShellu in priloženih ključev je lahko prikazan z ukazom:

Get-PSReadlineKeyHandler | ? $ _. funkcija-podobna '* hist *'

Opis ključne funkcije
---       --------             -----------
Opis ključne funkcije
---       --------                -----------
UpArrow PreviousHistory Zamenjajte vnesene podatke s prejšnjim dnevnikom
DownArrow NextHistory Zamenjajte svoje vnose z naslednjim vnosom v dnevnik
Ctrl + R ReverseSearchHistory Izvedite interaktivno iskanje po dnevniku
Ctrl + S ForwardSearchHistory Izvedite interaktivno iskanje dnevnika v smeri naprej
Alt + F7 ClearHistory Izbrišite vse elemente iz dnevnika ukazne vrstice (ne iz dnevnika PowerShell)
F8 HistorySearchBackward Iskanje prejšnjega elementa dnevnika, ki se začne s trenutnim vnosom, na primer P ...
Shift + F8 HistorySearchForward Iskanje naslednjega dnevnika, ki se začne s trenutnim vnosom, na primer Ne ...
Brez povezave ViSearchHistoryBackward Začne novo iskanje dnevnika nazaj.
Brezvezani začetekOfHistory Pojdite na prvi element dnevnika
Brezvezani EndOfHistory Pojdite na zadnji element (trenutni vnos) v dnevniku

Zgodovina ukazov je konfigurirana s pomočjo ukaznih ukazov Pridite-PSReadlineOption in Set-PSReadlineOption. Trenutne nastavitve je mogoče dobiti s to zasnovo:

Get-PSReadlineOption | izberite HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle

Morda nas bodo zanimale nastavitve za naslednje parametre:

  • ZgodovinaNoDuplikati - Ali moram ohraniti iste ukaze v zgodovini PowerShell-a?
  • MaximumHistoryCount - največje število shranjenih ukazov (4096 ukazov je privzeto shranjenih);
  • Zgodovina IskanjeCursorMovesToEnd - ali naj gre pri iskanju do konca ukaza;
  • HistorySearchCaseSensitive - ali naj bodo pri iskanju odvisne od malih in velikih črk;
  • HistorySavePath - pot do besedilne datoteke, v katero je shranjena zgodovina ukazov PowerShell;
  • HistorySaveStyle - značilnosti ukazov za shranjevanje:
    • SaveIncrementally - ukazi se shranijo med izvajanjem (privzeto)
    • SaveAtExit - shranjevanje zgodovine pri zapiranju konzole
    • Shrani nič - onemogoči zgodovino ukazov

Nastavitve modula PSReadLine lahko spremenite z ukazom Set-PSReadlineOption, na primer:

Set-PSReadlineOption -HistorySaveStyle SaveAtExit

Tako je možnost shranjevanja zgodovine izvedenih ukazov v PowerShell 5.0 še en argument za opustitev cmd v korist konzole PoSh..

Brisanje zgodovine ukazov v PowerShellu

Kot smo opisali zgoraj, modul PSReadline shrani vse ukaze konzole PowerShell v besedilno datoteko. V nekaterih primerih pa bo morda moral skrbnik v konzolo PowerShell vnesti različne zaupne podatke (poverilnice, gesla, naslove, osebne podatke itd.). Tako lahko drug skrbnik ali napadalec dostopa do podatkov v besedilni datoteki. Zaradi varnosti boste morda morali počistiti dnevnik ukazov PowerShell ali popolnoma onemogočiti zgodovino ukazov.

Cmdlet Jasna zgodovina ni mogoče uporabiti za brisanje zgodovine ukazov, ker počisti samo seznam prejšnjih ukazov, ki se prikaže v ukaznem listu Get-History.

Če želite izbrisati zgodovino prejšnjih ukazov PoSh, morate izbrisati datoteko, v katero so shranjene. Najlažji način za to je z ukazom:

Remove-Item (Get-PSReadlineOption) .HistorySavePath

Po tem zaključite sejo PoSh:

Če želite popolnoma onemogočiti shranjevanje zgodovine ukazov PoSh v besedilno datoteko, zaženite ukaz:

Set-PSReadlineOption -HistorySaveStyle SaveNothing

Uvozite zgodovino ukazov PowerShell v drugo sejo

V nekaterih primerih je priročno imeti pri roki en ali isti seznam pogosto uporabljenih ukazov PowerShell v različnih računalnikih. Trenutno zgodovino ukazov lahko izvozite v datoteko xml in jih uvozite v druge računalnike. To lahko storite s kopiranjem datoteke ConsoleHost_history.txt v uporabniške profile na potrebnih računalnikih..

Z ukaznim ukazom Export-Clixml lahko uporabite tudi za izvoz ukazov iz trenutne seje v datoteko:

Get-Zgodovina | Export-Clixml -Path c: \ ps \ Commands_hist.xml

Za uvoz ukazov iz datoteke v PoSh sejo:

Zgodovina Add -InputObject (Import-Clixml -Path c: \ ps \ commandnds_hist.xml)

Če želite samodejno uvoziti ukaze v datoteko na koncu seje PoSh, lahko skript vežete na dogodek konca seje PoSh (!! Seja se mora končati z ukazom za izhod in ne samo zapreti okno PoSh):

$ HistFile = Pridružitvena pot ([okolje] :: GetFolderPath ('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action Get-Zgodovina | Export-Clixml $ HistFile | ničelno
if (Testna pot $ HistFile) Import-Clixml $ HistFile | Zgodovina dodatkov