iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: # Последняя команда [Microsoft.PowerShell.Commands.HistoryInfo] $LastHistory # Цвет фона [System.ConsoleColor] $Background = $Host.UI.RawUI.BackgroundColor # Функция проверяет, входит пользователь запустивший сеанс # в группу "Администраторы", если да возвращает true, иначе false function IsAdmin { $AdminGroup = "S-1-5-32-544" $CurrentGroup = ([Security.Principal.WindowsIdentity]::GetCurrent()).Groups if ($CurrentGroup -match $AdminGroup) { $true } else { $false } } # Функция сохраняет последнюю команду истории в переменную скрипта $LastHistory # и возвращает true, иначе false function Set-LastHistory { $LastCommand = Get-History -Count 1 if ($LastCommand.Id -gt $Script:LastHistory.Id) { $Script:LastHistory = $LastCommand $true } else { $false } } # Функция вычисляет время исполнения последней команды и возвращает его в виде # отформатированной строки function Get-LastExecutionTime { $Diff = $Script:LastHistory.EndExecutionTime - $Script:LastHistory.StartExecutionTime if ($Diff.TotalMilliseconds -lt 1000) { "{0:000.00} ms" -f [math]::Round($Diff.TotalMilliseconds, 2) } elseif ($Diff.TotalMilliseconds -lt 60000) { "{0:00.00} s" -f [math]::Round($Diff.TotalMilliseconds / 1000, 2) } elseif ($Diff.TotalMilliseconds -lt 3600000) { "{0:00.00} m" -f [math]::Round($Diff.TotalMilliseconds / 60000, 2) } elseif ($Diff.TotalMilliseconds -ge 3600000) { "{0:00.00} h" -f [math]::Round($Diff.TotalMilliseconds / 3600000, 2) } } function Global:Prompt { # true - если есть последняя команда, иначе false $IsLastCommand = Set-LastHistory # Если есть последняя команда - получить время её исполнения if ($IsLastCommand) { $LastExecutionTime = Get-LastExecutionTime } # Запись в консоль времени исполнения последней команды if ($LastExecutionTime) { Write-Host # Запись в консоль номера последней команды if ($Script:LastHistory.Id -gt 0) { Write-Host "$([char]0xE0B6)" -F DarkBlue -B $Background -NoN Write-Host "$([char]0xE0B6)" -F Blue -B DarkBlue -NoN Write-Host $Script:LastHistory.Id -F White -B Blue -NoN Write-Host "$([char]0xE0B4)" -F Blue -B DarkBlue -NoN } Write-Host "$([char]0xE0B6)" -F DarkBlue -B DarkBlue -NoN Write-Host $LastExecutionTime -F White -B DarkBlue -NoN Write-Host "$([char]0xE0B4)" -F DarkBlue -B $Background Write-Host } # Запись в консоль значка администратора if (IsAdmin) { Write-Host "$([char]0xE0C7)" -F DarkRed -B $Background -NoN Write-Host "$([char]0xE0A2)" -F Yellow -B DarkRed -NoN Write-Host "$([char]0xE0C6)" -F DarkRed -B $Background -NoN } # Запись в консоль метки дебаг режима if (Test-Path variable:\PSDebugContext) { Write-Host "$([char]0xE0C2)" -F Green -B $Background -NoN Write-Host "DBG" -F Black -B Green -NoN Write-Host "$([char]0xE0C0)" -F Green -B $Background -NoN } # Запись в консоль имени командной оболочки Write-Host "$([char]0xE0C5)" -F DarkBlue -B $Background -NoN Write-Host "PS" -F White -B DarkBlue -NoN Write-Host "$([char]0xE0B0)" -F DarkBlue -B Blue -NoN # Определение версии if ($PSVersionTable.PSVersion.Major -gt 5) { $PSVersion = $PSVersionTable.PSVersion.ToString() } else { $PSVersion = $PSVersionTable.PSVersion.ToString(2) } # Запись в консоль версии командной оболочки Write-Host $PSVersion -F White -B Blue -NoN Write-Host "$([char]0xE0B0)" -F Blue -B DarkCyan -NoN # Количество директорий отображаемых в пути $DirectoryCounter = 2 # Определение текущего пути if (($PWD.Path.Split('\')).Count -le ($DirectoryCounter + 1)) { $PromptPath = $PWD.Path } else { $PromptPath = "$($PWD.Path[0.1]):\..\$(($PWD.Path.Split('\') | Select-Object -Last ($DirectoryCounter)) -join '\')" } # Запись в консоль текущего пути Write-Host $PromptPath -F White -B DarkCyan -NoN Write-Host "$([char]0xE0B0)" -F DarkCyan -B $Background -NoN # Запись в консоль приглашения ввода Write-Host -F White ("$([char]0xE0B1)" * ($NestedPromptLevel + 1)) -NoN ' ' } |
|