Как стать автором
Обновить

Настройка Windows после установки с помощью PowerShell

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров16K

Хочу поделиться с вами простыми шагами по настройке Winodows после ее установки с помощью PowerShell. Все шаги я выполнял неоднократно на Windows 11, думаю, что ошибок с Windows 10 не должно возникнуть.

Справка
Windows PowerShell - финальная версия 5.1, по умолчанию установлен в Windows.
PowerShell - форк Windows PowerShell версии 5.1 с последующим развитием, доступен на Windows, Linux и macOS.

Настройки подключения к интернету по умолчанию

Первое, что полезно выполнить, если в процессе будут использоваться различные ВПН - это сделать подключение по умолчанию самым приоритетным.

  1. Проверьте какие подключения у вас доступны, с помощью Windows PowerShell, запущенного от имени Администратора в терминале Windows:

Get-NetIPInterface -AddressFamily IPv4
  1. Установите минимальное значение InterfaceMetric для вашего текущего подключения:

Set-NetIPInterface -InterfaceIndex 19 -InterfaceMetric 5
  1. Перезагрузите сетевой интерфейс, метрику которому вы изменили:

Restart-NetAdapter -InterfaceAlias "Ethernet"

Установка PowerShell

  1. Запустите Windows терминал и обновите два системных приложения, сам терминал и Windows App Installer с помощью менеджера пакетов Winget:

winget update --id Microsoft.WindowsTerminal -e --accept-source-agreements --source winget; if ($?) { winget update --id Microsoft.AppInstaller -e --source winget };
  1. После обновления перезапустите терминал Windows и установите PowerShell:

winget install --id Microsoft.PowerShell -e --source winget
  1. Перезагрузите терминал, перейдите в настройки и установите PowerShell профилем по умолчанию.

После этого можно перейти к третьему шагу.

Установка приложений

  1. Запустите Windows терминал от имени Администратора и создайте список приложений с помощью блокнота. Вот мой текущий список:

notepad.exe .\PowerShellInstall_Winget_Machine.ps1
#
## PowerShell
### Winget's apps installation 
#

winget install --id Git.Git -e --source winget;
if ($?) { winget install --id Microsoft.VCRedist.2015+.x64 -e --source winget };
if ($?) { winget install --id Skillbrains.Lightshot -e --source winget };
if ($?) { winget install --id qBittorrent.qBittorrent -e --source winget };
if ($?) { winget install --id Google.Chrome -e --source winget };
if ($?) { winget install --id Neovim.Neovim -e --source winget }; # Neovim is a refactor, and sometimes redactor, in the tradition of Vim
if ($?) { winget install --id 7zip.7zip -e --source winget };
if ($?) { winget install --id DEVCOM.JetBrainsMonoNerdFont -e --source winget };
if ($?) { winget install --id Mozilla.Thunderbird -e --source winget };
if ($?) { winget install --id gerardog.gsudo -e --source winget }; # sudo for Powershell
if ($?) { winget install --id ALCPU.CoreTemp --source winget }; # Program to monitor processor temperature and other vital information
if ($?) { winget install --id FxSound.FxSound --source winget }; # Equalizer for Windows
if ($?) { winget install --id Bitwarden.Bitwarden -e --source winget --scope user };
if ($?) { winget install --id Telegram.TelegramDesktop -e --source winget --scope user };
if ($?) { winget install --id Microsoft.VisualStudioCode -e --source winget --scope user };
if ($?) { winget install --id Obsidian.Obsidian -e --source winget --scope user };
if ($?) { winget install --id Yandex.Browser -e --source winget --scope user };
  1. Выполните скрипт PowerShell:

.\PowerShellInstall_Winget_Machine.ps1

Включение WSL и Hyper-V

Шаг №4.

Для работы мне нужен гипервизор, так как в Windows уже есть свой - его я и использую, а для полноценной поддержки Ansible в VS Code - WSL.

Для включения модулей необходимо запустить PowerShell от имени Администратора и выполнить команду:

wsl --install
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

И остался заключительный пятый шаг - настройка самого PowerShell для удобства использования.

Настройка PowerShell

Установка модулей PowerShell

  1. Создайте скрипт с необходимыми модулями:

notepad.exe .\PowerShellInstall_Modules.ps1
#
## PowerShell
### PowerShell modules installation
#

Install-Module -Name posh-git -Scope CurrentUser; # для работы с Git
if ($?) { Install-Module -Name z -Scope CurrentUser }; # Для быстрого перемещения по папкам
if ($?) { Install-Module -Name PSReadLine -Scope CurrentUser }; # Настройка промпта PowerShell
if ($?) { Install-Module -Name Terminal-Icons -Scope CurrentUser }; # Отображения иконок в темирнале с помощью Nerd Font (в моем случает JeBrainsMonoNerdFont)
  1. Выполните скрипт:

.\PowerShellInstall_Modules.ps1
  1. Удалите файлы со списками приложений и модулей:

Remove-Item $env:USERPROFILE\PowerShellInstall_*.ps1

Создание и настройка профиля

  1. Есть несколько типов профилей для PowerShell:

  • Current User, Current Host - $PROFILE, $PROFILE.CurrentUserCurrentHost

  • Current User, All Hosts - $PROFILE.CurrentUserAllHosts

  • All Users, Current Host - $PROFILE.AllUsersCurrentHost

  • All Users, All Hosts - $PROFILE.AllUsersAllHosts

Как правило, я использую $PROFILE. Для его создания нужно выполнить команду:

if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}
  1. Теперь можно перейти к настройкам самого профиля, вот мой текущий:

notepad.exe $PROFILE
#
## PowerShell
### PowerShell User Profile
#

### Alias

Set-Alias -Name vim -Value $env:ProgramFiles\Neovim\bin\nvim.exe
Set-Alias -Name cle -Value Clear-Host
Set-Alias -Name ll -Value Get-ChildItem
Set-Alias -Name cln -Value CleanTemp 
Set-Alias -Name touch -Value New-Item
Set-Alias -Name sudo -Value $env:LOCALAPPDATA\Microsoft\WinGet\Packages\gerardog.gsudo_Microsoft.Winget.Source_8wekyb3d8bbwe\x64\gsudo.exe
Set-Alias -Name ua -Value UpdateAll
Set-Alias -Name gst -Value GitStatus
Set-Alias -Name gsh -Value GitPush
Set-Alias -Name gll -Value GitPull
Set-Alias -Name hosts -Value ChangeHosts
Set-Alias -Name pubkey -Value SSHPubkey

### Functions

Function SSHPubkey {
  Get-Content $env:USERPROFILE\.ssh\id_rsa.pub | ssh $(Read-Host -Prompt 'Enter user@ip-address') 'cat >> $HOME/.ssh/authorized_keys'
}

Function ChangeHosts {
  sudo nvim $env:SystemRoot\System32\drivers\etc\hosts
}

Function GitPull {
  git.exe pull; if ($?) { Clear-Host }
}

Function GitStatus {
  git.exe status
}

Function CleanTemp {
  Remove-Item -Path $env:TEMP\* -Recurse -ErrorAction SilentlyContinue
}

Function Which ($command) {
  Get-Command -Name $command -ErrorAction SilentlyContinue |
  Select-Object -ExpandProperty Path -ErrorAction SilentlyContinue
}

Function UpdateAll {
  winget.exe upgrade --recurse --source winget --verbose
}

Function GitPush {
  git.exe add .; if ($?) { git.exe commit -am "." }; if ($?) { git.exe push }; if ($?) { Clear-Host }
}

### Import-Module

Import-Module -Name PSReadLine
Import-Module -Name z
Import-Module -Name Terminal-Icons
Import-Module -Name posh-git

### Setup PSReadLineOption

Set-PSReadLineOption -EditMode Emacs
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -HistoryNoDuplicates:$True
Set-PSReadLineOption -ShowToolTips:$True
# Get KeyHandlers 'Get-PSReadLineKeyHandler -Bound -Unbound'
Set-PSReadlineKeyHandler -Chord 'Ctrl+d' -Function DeleteChar
Set-PSReadLineKeyHandler -Chord 'Ctrl+f' -Function ForwardWord
Set-PSReadLineKeyHandler -Chord 'Enter' -Function ValidateAndAcceptLine

Основные настройки

Настройки доступны через файл settings.json, который можно открыть из меню Settings:

"defaults": 
        {
            "bellStyle": "taskbar",
            "colorScheme": "One Half Dark Edited",
            "cursorShape": "filledBox",
            "font": 
            {
                "face": "JetBrainsMono Nerd Font Mono",
                "size": 20
            },
            "opacity": 80,
            "padding": "14",
            "scrollbarState": "hidden",
            "useAcrylic": true
        },

Настройка темы

Я использую отредактированную тему "One Half Dark Edited", для того, чтобы применить ее, откройте настройки PowerShell через json-файл и внутри брекетов в разделе "schemes" вставьте данный блок (если вам интересно, что за тема):

{
	"background": "#2C2845",
	"black": "#5E5D5D",
	"blue": "#61AFEF",
	"brightBlack": "#757575",
	"brightBlue": "#61AFEF",
	"brightCyan": "#56B6C2",
	"brightGreen": "#98C379",
	"brightPurple": "#C678DD",
	"brightRed": "#E06C75",
	"brightWhite": "#DCDFE4",
	"brightYellow": "#FFFD58",
	"cursorColor": "#0CFF93",
	"cyan": "#56B6C2",
	"foreground": "#FCFCFC",
	"green": "#98C379",
	"name": "One Half Dark Edited",
	"purple": "#C678DD",
	"red": "#E06C75",
	"selectionBackground": "#FFFFFF",
	"white": "#DCDFE4",
	"yellow": "#E5E34F"
}

На данный момент мне этого достаточно для повседневного использования. Периодически я добавляю полезные alias. Какое-то время использовал темы от Oh my posh, пробовал промпт Starship и терминал WezTerm, но в итоге вернулся к стандартному интерфейсу PowerShell.

Создание ключевой пары для SSH

Откройте Windows Terminal от имени Администратора, установите автоматический запуск для службы ssh-agent и запустите ее:

Get-Service -Name ssh-agent | Set-Service -StartupType Automatic; if ($?) { Start-Service ssh-agent };

Создайте ключевую пару для SSH и добавьте ее в ssh-agent:

ssh-keygen -t ed25519 -C "ivan.a.lobanov"

-C - добавляет комментарий к ключевой паре.

ssh-add $env:USERPROFILE\.ssh\id_ed25519

На этом первоначальная настройка Windows закончена.

Теги:
Хабы:
Всего голосов 12: ↑12 и ↓0+13
Комментарии21

Публикации

Истории

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область