Aggiungere la history comandi persistente su power shell

Nonostante powershell di windows abbia introdotto molti miglioramenti alla shell di windows, manca una funzionalità molto banale ma altrettanto comoda, la history di comandi persistente.

Possiamo ovviare a questo limite, aggiungendo degli script nel profile.ps1 di powershell.

Per sapere dove si trova il nostro profile file, da shell dobbiamo comporre:

$profile

questa ci farà sapere qual’è il path del nostro profile.ps1 file.

con questo comando invece possiamo verificare se un profile.ps1 file è già esistente oppure no:

Test-Path $profile

se il comando risponderà false, allora dobbiamo sforzarne la creazione con il seguente comando:

New-Item -path $profile -type file -force

Per poi poterlo aprire con Notepad:

notepad $profile

Adesso possiamo editare il file con le funzioni che serviranno per avere una history persistente:

Function HowLong {
<# .Synopsis Returns the time taken to run a command .Description By default returns the time taken to run the last command .Parameter ID The history ID of an earlier item. #>
param ( [Parameter(ValueFromPipeLine=$true)]
$id = ($MyInvocation.HistoryId -1)
)
process { foreach ($i in $id) {
(get-history $i).endexecutiontime.subtract(
(get-history ($i)).startexecutiontime).totalseconds
}
}
}

 

Function prompt {
$hid = $myinvocation.historyID
if ($hid -gt 1) {get-history ($myinvocation.historyID -1 ) |
convertto-csv | Select -last 1 >> $logfile
}
$(if (test-path variable:/PSDebugContext) { ‘[DBG]: ‘ } else { ” }) +
“#$([math]::abs($hid)) PS$($PSVersionTable.psversion.major) ” + $(Get-Location) +
$(if ($nestedpromptlevel -ge 1) { ‘>>’ }) + ‘> ‘
}

 

$MaximumHistoryCount = 2048
$Global:logfile = "$env:USERPROFILEDocumentswindowsPowershelllog.csv"
$truncateLogLines = 100
$History = @()
$History += '#TYPE Microsoft.PowerShell.Commands.HistoryInfo'
$History += '"Id","CommandLine","ExecutionStatus","StartExecutionTime","EndExecutionTime"'
if (Test-Path $logfile) {$history += (get-content $LogFile)[-$truncateLogLines..-1] | where {$_ -match '^"d+"'} }
$history > $logfile
$History | select -Unique |
Convertfrom-csv -errorAction SilentlyContinue |
Add-History -errorAction SilentlyContinue

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *