Настройка ярлыка PowerShell
1. Поменять размер шрифта на 18 и выбрать фонт Lucida Console
2. В ярлыке запуска добавить -nologo
"C:\Users\administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell.lnk" %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -nologo
3. После запуска в Defaults поменять прозрачность на 90%
4. Размер 120 на 40 строк.
Профиль
Описание | Путь | |
---|---|---|
Текущий пользователь - текущий хост | $Home\[My ]Documents\PowerShell\Microsoft.PowerShell_profile.ps1 | $profile |
Текущий пользователь - все хосты | $Home\[My ]Documents\PowerShell\Profile.ps1 | $profile.CurrentUserAllHosts |
Все пользователи – Текущий хост | $PSHOME\Microsoft.PowerShell_profile.ps1 | $profile.AllUsersCurrentHost |
Все пользователи – Все хосты | $PSHOME\Profile.ps1 | $profile.AllUsersAllHosts |
Посмотреть все существующие файлы профиля
$profile| select *Host | fl $Profile | Get-Member -MemberType NoteProperty
Создать профиль
if (!(test-path $PROFILE.CurrentUserAllHosts )){new-item $PROFILE.CurrentUserAllHosts -type file -force};ise $PROFILE.CurrentUserAllHosts
Настроить политику запуска
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force
Поменять заголовок окна на имя пользователя
$host.UI.RawUI.WindowTitle = $(whoami)
Модуль PSReadLine
Вся красота в консолии PowerShell делается с помощью модуля PSReadLine
Чтобы посмотреть все параметры у командлетов, можно после - нажать Ctrl+пробел и вы увидете списком все варианты.
Если пропадают русские буквы, то нужно переустановить модуль PSReadLine
- Remove-Module PSReadLine
- Закрыть консоль PowerShell и удалить папку C:\Program Files\WindowsPowerShell\Modules\PSReadLine
- Install-Module PSReadLine -Force -Scope CurrentUser -SkipPublisherCheck
или
добавить папку с версией 2.3.4 в папку C:\Program Files\WindowsPowerShell\Modules\PSReadLine
Поиск по истории, как в Bash
1. Запускаем
ise $PROFILE
2. Добавляем в конец и сохраняем
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
Раскрашиваем prompt в PowerShell
Идея в том, чтобы если PowerShell запущен в режиме админа, то приглашение было красным, а если не админом, то белым.
Шаг 1. Запустить консоль PowerShell. Если профиль PowerShell для пользователя не найден, то создать его, если найден, то открыть на редактирование. Вместо ise можно использовать notepad, например так notepad $profile
if (!(test-path $profile)){new-item $profile -type file -force};ise $profile
Шаг 2. Вписать следующий код и сохранить файл
if ($host.Name -eq 'ConsoleHost') { $host.UI.RawUI.WindowTitle = $(whoami) # Write curent user name in Powershell window tilte function prompt { $MyESC = "$([char]27)" $MyColorRed = $MyESC + "[91m" $MyColorWhite = $MyESC + "[97m" $MyColorMagenta = $MyESC + "[95m" $MyColorGreen = $MyESC + "[92m" $MyRightArrow = [char]0x2192 $MyColorArrow = $MyESC + "[38;5;214m" $MyLocation = (Get-Location).Path if ($MyLocation.length -gt 30) { $MyLocation = $MyLocation.Substring(0,9)+"..."+$MyLocation.Substring(($MyLocation.length-20),20) } [Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent(); if($user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)){ "$($MyColorRed)PS$MyColorMagenta[$MyColorGreen" + $MyLocation+"$MyColorMagenta]$MyColorArrow$MyRightArrow" + $(if ($NestedPromptLevel -ge 1) { $MyRightArrow+'>' }) + "$MyColorWhite" } else{ "$($MyColorWhite)PS$MyColorMagenta[$MyColorGreen" + $MyLocation+"$MyColorMagenta]$MyColorArrow$MyRightArrow" + $(if ($NestedPromptLevel -ge 1) { $MyRightArrow+'>' }) + "$MyColorWhite" } } } else{ "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "; }
Шаг 3. При запуске от имени админа приглашение будет красным, обычное - белым.
Код для просмотра ASCII кодов всех доступных цветов
Using ANSI Escape Sequences in PowerShell
$esc=$([char]27) echo "`n$esc[1;4m256-Color Foreground & Background Charts$esc[0m" foreach ($fgbg in 38,48) { # foreground/background switch foreach ($color in 0..255) { # color range #Display the colors $field = "$color".PadLeft(4) # pad the chart boxes with spaces Write-Host -NoNewLine "$esc[$fgbg;5;${color}m$field $esc[0m" #Display 6 colors per line if ( (($color+1)%6) -eq 4 ) { echo "`r" } } echo `n }
В данной строке меняется 31m от 0 до 255 для foreground color
"$([char]27)[38;5;31m TestString" "$([char]27)[38;5;15m$([char]27)[48;5;33m ssss" # белый текст 15 на голубом 33 фоне. "$([char]27)[38;5;15m$([char]27)[48;5;17m" # Вернуть стандартный цвет PowerShell
256 цветов
Следующие коды указывают терминалу на использование заданного идентификатора цвета:
ESC Code Sequence | Описание |
---|---|
ESC[38;5;{ID}m | Установить цвет текста. |
ESC[48;5;{ID}m | Установить цвет фона. |
Где {ID} следует заменить на индекс цвета от 0 до 255 из следующей таблицы цветов:
Примеры
Вставить в profile.ps1
$global:forePromptColor = 0 $global:leftArrow = [char]0xe0b2 $global:rightArrow = [char]0xe0b0 $global:esc = "$([char]27)" $global:fore = "$esc[38;5" $global:back = "$esc[48;5" $global:prompt = ''
Get-ChildItem -Exclude *.xml $PSHOME | Format-Table Mode, @{ Label = "Name" Expression = { switch ($_.Extension) { '.exe' { $color = "93"; break } '.ps1xml' { $color = '32'; break } '.dll' { $color = "35"; break } default { $color = "0" } } $e = [char]27 "$e[${color}m$($_.Name)${e}[0m" } }, Length ######### Process ################ Get-Process | Format-Table @{ Label = "PID"; Expression={$_.Id}}, @{ Label = "Name"; Expression={$_.Name}}, @{ Label = "RAM (MB)"; Expression={if($_.WS/1MB -gt 100){"$([char]27)[0;31m$([System.Math]::Round($_.WS/1MB, 1))$([char]27)[0m"}else{"$([char]27)[0;32m$([System.Math]::Round($_.WS/1MB, 1))$([char]27)[0m"}}}, @{ Label = "Responding"; Expression={if($_.Responding -eq $true){"$([char]27)[0;32m$($_.Responding)$([char]27)[0m"}else{"$([char]27)[0;31m$($_.Responding)$([char]27)[0m"}}}
Ещё вариант
if ($host.Name -eq 'ConsoleHost' -or $host.Name -eq 'Visual Studio Code Host' ) { Import-Module PSReadline -RequiredVersion 2.2.0 Set-PSReadLineOption -EditMode Windows Set-PSReadLineOption -PredictionSource History Set-PSReadlineOption -Color @{ "Command" = [ConsoleColor]::Green "Parameter" = [ConsoleColor]::Gray "Operator" = [ConsoleColor]::Magenta "Variable" = [ConsoleColor]::Yellow "String" = [ConsoleColor]::Yellow "Number" = [ConsoleColor]::Yellow "Type" = [ConsoleColor]::Cyan "Comment" = [ConsoleColor]::DarkCyan "InlinePrediction" = '#70A99F' } Set-PSReadLineKeyHandler -Function AcceptSuggestion -Key 'Ctrl+Spacebar' Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward Set-PSReadLineKeyHandler -Key Ctrl+Shift+b ` -BriefDescription BuildCurrentDirectory ` -LongDescription "Build the current directory" ` -ScriptBlock { [Microsoft.PowerShell.PSConsoleReadLine]::RevertLine() [Microsoft.PowerShell.PSConsoleReadLine]::Insert("dotnet build") [Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine() } }
Выводим Эмодзи/Emoji
Powershell 7 и Terminal поддерживают Emoji с помощью `u{код эмодзи}
Windows Powershell верссии 5.1 не поддерживают символ Unicode escape `u и требуются дополнительные преобразования.
Возьмём шестнадцатиричный код символ смайлика U+1F600. В начале уберём U+ из начала строки и оставим Hex значение, затем 1F600 конвертируем из Hex в Int32. После, сконвертируем значение в UTF-16 строку.
$EmojiIcon = [System.Convert]::toInt32("1F600",16) [System.Char]::ConvertFromUtf32($EmojiIcon) # или $EmojiIcon = [System.Convert]::toInt32("1F600",16) Write-Host "The Operation Completed Successfully " -NoNewline Write-Host -ForegroundColor Green ([System.Char]::ConvertFromUtf32($EmojiIcon)) # или $UNIGreen = [System.Char]::ConvertFromUtf32(([System.Convert]::toInt32("00002705",16))) #$UNIRed = [System.Char]::ConvertFromUtf32(([System.Convert]::toInt32("0000274C",16))) $UNIRed = [System.Char]::ConvertFromUtf32(([System.Convert]::toInt32("000026D4",16)))