Повторно используйте свой профиль Powershell на разных компьютерах и синхронизируйте его с обновлениями псевдонимов, функций и т. д.

В этом сообщении блога мы настроили Powershell aliases.ps1, functions.ps1 и prompt.ps1 внутри репозитория git, который централизует все ваши конфигурации, псевдонимы и функции Powershell.

Настройка репозитория Git

Создайте или войдите в github.com, перейдите в Репозитории и создайте репозиторий Github. В этом примере мы создаем репо под названием powershell.

На своем компьютере создайте каталог Repos в своей домашней папке и измените каталог на этот путь. Если вы хотите использовать другое имя файла или местоположение для каталога репозиториев, измените его на этот путь.

mkdir ~/Repos
cd ~/Repos

Внутри вашего каталога Repos git клонируйте репозиторий powershell, который вы создали на Github.

git clone https://github.com/<username>/powershell.git

Настройка переменных среды

Перейдите в Панель управления › Система

Перейти к расширенным системным настройкам

Перейдите к переменным среды.

Добавьте новую переменную REPOS_DIR и укажите расположение каталога Repos.

Добавьте новую переменную POWERSHELL_REPO_DIR и укажите расположение каталога репозитория powershell.

Настройка профиля.ps1

Запустите echo $profile, чтобы увидеть, где определен ваш профиль Powershell.

Откройте ваш любимый текстовый редактор (Sublime Text Editor, Atom, Notepad…) и добавьте следующие строки:

# Powershell 

# Load functions

$functions = [string]::join([environment]::newline, (get-content -path $env:POWERSHELL_REPO_DIR\functions.ps1))
invoke-expression $functions

# Load aliases

$aliases = [string]::join([environment]::newline, (get-content -path $env:POWERSHELL_REPO_DIR\aliases.ps1))
invoke-expression $aliases

# Prompt 

$prompt = [string]::join([environment]::newline, (get-content -path $env:POWERSHELL_REPO_DIR\prompt.ps1))
invoke-expression $prompt

Сохраните как profile.ps1 по пути, указанному echo $profile.

Эти строки ссылаются на файлы aliases.ps1, functions.ps1 и prompt.ps1, которые мы создадим в репозитории powershell. Это единственный шаг настройки, который вы должны повторить на всех своих машинах.

Вы можете установить разные местоположения для своего каталога Repos на каждой машине. Возможность повторного использования POWERSHELL_REPO_DIR и REPOS_DIR практична, потому что вы можете захотеть установить псевдонимы для файлов или скриптов внутри вашего репозитория powershell. Они будут работать на каждой машине, если вы повторно используете $env:POWERSHELL_REPO_DIR или $env:REPOS_DIR в своих псевдонимах или функциях.

Настройка конфигураций и функций Powershell

В репозитории powershell создайте следующие файлы. aliases.ps1, functions.ps1 и prompt.ps1.

В aliases.ps1 добавьте полезные псевдонимы, которые вы хотите повторно использовать на каждой машине, например

# Aliases

Set-Alias -Name cat -Value Get-Content -Option AllScope

В functions.ps1 добавьте полезные функции, которые вы хотите повторно использовать на каждой машине, например

# Functions

# Reload Powershell

Function reload_powershell { & $profile }

# Go to locations

Function repos { cd $env:REPOS_DIR }

# Prettify code

Function prettify { npx prettier --write . }

Внутри prompt.sh настройте командную строку, например.

# Colors
# Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White, 

${ESC} = [char]27
${output_color} = "${ESC}[0m"

# Format

${space} = ' '

# Terminal format

$console = $host.ui.rawui
$console.backgroundcolor = "black"
$console.foregroundcolor = "white"
$colors = $host.privatedata
$colors.verbosebackgroundcolor = "black"
$colors.verboseforegroundcolor = "cyan"
$colors.warningbackgroundcolor = "black"
$colors.warningforegroundcolor = "yellow"
$colors.ErrorBackgroundColor = "black"
$colors.ErrorForegroundColor = "red"

# Prompt format

Function prompt {
    $base ="PS" + ${space}
    $path ="$($executionContext.SessionState.Path.CurrentLocation)" + ${space}
    $userPrompt = "$('>' * ($nestedPromptLevel + 1))" + ${space}

    Write-Host "`n$base" -NoNewline -ForegroundColor "white" -BackgroundColor "black"
    Write-Host $path -NoNewline -ForegroundColor "blue" -BackgroundColor "black"

    if (Test-Path .git) { 
        try {
            $branch = git rev-parse --abbrev-ref HEAD

            Write-Host "($branch)${space}" -NoNewline -ForegroundColor "cyan" -BackgroundColor "black"
        } catch { }
    }

    Write-Host $userPrompt -NoNewline -ForegroundColor "white"

    return "${output_color}"
}

Настройте функцию очистки, которая может выполняться на каждой машине.

Создайте Function внутри functions.ps1.

Function tidy { 
   ${paths} = "$env:USERPROFILE\Downloads\*", "$env:USERPROFILE\Pictures\Screenshots\*" 

   foreach (${path} in ${paths})
   {
     Remove-Item -Path ${path} -Recurse
   }
}

В этом примере мы задаем массив общих путей к файлам, которые необходимо очистить. Затем мы перебираем массив и рекурсивно удаляем все файлы и каталоги, вложенные в этот путь к файлу. Обратите внимание на * после каждого пути к файлу, что гарантирует удаление только дочерних элементов этого каталога.