PowerShell: Настроить отображение командной строки

Настраиваю сервер SSH на удалённом компьютере, но в какой-то момент отошёл попить кофе. Вернулся и продолжил работу в PowerShell, но почему-то изменения, которые я делал, не применялись. Долго копался и разбирался, пока не заметил, что я выполняю все действия в PowerShell не для удалённого компьютера, а для своего! Путаница возникла из-за того, что при входе в удалённый сеанс SSH через PowerShell никаких визуальных отличий нет! Я решил это хоть как-то исправить.

Для изменения внешнего вида командной строки PowerShell нам нужно править файл профиля консоли PowerShell. Таких профилей несколько:

PowerShell
$PROFILE | Get-Member -MemberType noteproperty | select name

Name
----
AllUsersAllHosts
AllUsersCurrentHost
CurrentUserAllHosts
CurrentUserCurrentHost

Мы можем посмотреть, что представляет из себя конкретная переменная, например так:

PowerShell
C:\Windows\System32> $PROFILE.AllUsersAllHosts
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1

Как видно из примера выше, в консоль был выведен путь, который представлен в переменной $PROFILE.AllUsersAllHosts.

Ну лучше отобразить всё сразу:

PowerShell
$profile | Select-Object -Property *

Получим:

PowerShell
AllUsersAllHosts       : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost    : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : C:\Users\Admin\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\Admin\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Length                 : 75

Поскольку у меня включена проверка подписи скриптов PowerShell, то мне удобнее вносить изменения в файл профиля именно для админа (CurrentUserAllHosts).

Можно создать файл профиля через командлет, но мне проще вручную. Полный путь к файлу профиля для нашего админа будет такой:
«C:\Users\Admin\Documents\WindowsPowerShell\profile.ps1»
В него я добавил такие строчки:

C:\Users\Admin\Documents\WindowsPowerShell\profile.ps1
function Prompt
{
#"[\\" + $env:COMPUTERNAME + "] " + (Get-Location) + "> "
  Write-Host "[\\" -f DarkGray -nonewline;
  Write-Host $env:COMPUTERNAME -f DarkGray -nonewline;
  Write-Host "] " -f DarkGray -nonewline;
  "" + (Get-Location) + "> "
}
Если на удалённом компьютере включены политики, ограничивающие запуск скриптов, то нужно его подписать. Установить политику запуска скриптов PowerShell можно так:

PowerShell
Set-ExecutionPolicy Remotesigned

Кроме этого чтобы профиль мог запуститься, нужно, чтобы был разрешён (не был запрещён) запуск этого скрипта в SRP.

 

По умолчанию приглашение в консоли PowerShell выглядит так:
PowerShell: Настроить отображение командной строки
Если я подключусь удалённо через SSH к другому компьютеру, то она мало изменится:
PowerShell: Настроить отображение командной строки

После изменения файла профиля на удалённом компьютере, консоль стала информативнее:
PowerShell: Настроить отображение командной строки

Изменяя подобным образом файл профиля, можно выводить (или скрывать) необходимую информацию по вашему вкусу.

 

Added 23.06.21
Изменил скрипт так, чтобы дополнительно выводилось имя текущего пользователя:

C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
function Prompt
{
  Write-Host "[\\" -f DarkGray -nonewline;
  Write-Host $Env:USERNAME@$env:COMPUTERNAME -f DarkGray -nonewline;
  Write-Host "] " -f DarkGray -nonewline;
  "" + (Get-Location) + "> "
}

PowerShell: Настроить отображение командной строки

Решение возможных проблем


Если для удалённого компьютера (по OpenSSH) правила отображения не сработали, то есть вероятность, что дефолтовый шелл у вас не PowerShell, а обычная консоль. Попробуйте проверить, просто набрав в той консоли powershell. Если после этого откроется консоль PowerShell и будет работать корректное отображение приглашения со всей расцветкой, то на сервере нужно будет поменять шелл для OpenSSH:

 New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
 New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "/c" -PropertyType String -Force


Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments