Повторно используйте свой профиль 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 } }
В этом примере мы задаем массив общих путей к файлам, которые необходимо очистить. Затем мы перебираем массив и рекурсивно удаляем все файлы и каталоги, вложенные в этот путь к файлу. Обратите внимание на *
после каждого пути к файлу, что гарантирует удаление только дочерних элементов этого каталога.