Архив метки: PowerShell



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

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

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

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

Name
----
AllUsersAllHosts
AllUsersCurrentHost
CurrentUserAllHosts
CurrentUserCurrentHost

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

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

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

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

$profile | Select-Object -Property *

Получим:

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»
В него я добавил такие строчки:

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 можно так:

Set-ExecutionPolicy Remotesigned

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

 

По умолчанию приглашение в консоли PowerShell выглядит так:

Если я подключусь удалённо через SSH к другому компьютеру, то она мало изменится:

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

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

 

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

function Prompt
{
  Write-Host "[\\" -f DarkGray -nonewline;
  Write-Host $Env:USERNAME@$env:COMPUTERNAME -f DarkGray -nonewline;
  Write-Host "] " -f DarkGray -nonewline;
  "" + (Get-Location) + "> "
}