Глава 1. Установка и конфигурирование PowerShell 7
Содержание
Данная глава рассматривает следующие рецепты:
-
Установка PowerShell 7
-
Применение консоли PowerShell 7
-
Исследование артефактов установки PowerShell 7
-
Сборка файлов профиля PowerShell 7
-
Установка VS Code
-
Установка шрифта Cascadia Code
-
Исследование PSReadLine
PowerShell 7 представляет самые последние шаги в развитии PowerShell. PowerShell впервые был представлен общественности в 2003, причём формально был выпущен в качестве Windows PowerShell v1 в 2006. На протяжении следующего десятилетия Microsoft выпустил множество версий, завершившиеся на PowerShell 5.1. На протяжении разработки Windows PowerShell, данный продукт продвинулся от представления в качестве добавки поверх Windows до интегрированной функциональной возможности. Microsoft планирует поддерживать Microsoft PowerShell 5.1 на протяжении длительного времени, однако, скорее всего, никаких новых свойств.
Команда разработки PowerShell приступила к работе над версией PowerShell с открытым исходным кодом на основе версии .NET Core с открытым исходным кодом. Самые первые три версии PowerShell Core 6.0, 6.1 и 6.2 представляли проверку концепции - вы можете выполнять центральные функции и функциональные возможности PowerShell по всем платформам Windows, Mac и Linux. Однако они были крайне ограничены в плане поддержки всех богатых потребностей профессионального сообщества ИТ.
С PowerShell 7.0 пришло улучшение паритета с Windows PowerShell. Имеются несколько модулей, которые не работают в PowerShell 7, а также ещё несколько, которые работают через описанный в Главе 3, Изучаем совместимость с Windows PowerShell механизм. PowerShell 7.0 начал поставляться в 2019 и за ним последовала версия 7.1. Данная книга применяет термин "PowerShell 7" чтобы объединять и PowerShell 7.0 и 7.1.
После установки PowerShell 7 вы можете запускать его и применять просто как консоль Windows PowerShell. Та команда, которая запускает
PowerShell 7 это теперь pwsh.exe
(вместо powershell.exe
в Windows
PowerShell). PowerShell 7 также применяет иные местоположения файлов профилей по сравнению с Windows PowerShell. Вы можете настраивать свои профили
PowerShell 7 для применения новых функциональных возможностей PowerShell. Вы также можете применять различные файлы профилей для Windows
PowerShell и PowerShell 7.
Integrated Scripting Environment (ISE) Windows PowerShell это инструмент, который применяется с PowerShell. Однако ISE не поддерживается с PowerShell . Для его замены пользуйтесь Visual Studio Code (VS Code), проектом редактирования с открытым исходным кодом, который предоставляет все необходимые свойства самого ISE и значительно больше дополнительных. {Прим. пер.: также рекомендуем новый терминал Windows, подробнее в нашем переводе Изучаем подсистемы Windows для Linux Прэйтика Сингха}.
Microsoft также разработал новый шрифт, Cascadia Code, чтобы он совпадал с запускаемым VS Code. Этот шрифт хорошее улучшение Courier или прочих шрифтов с моношириной. Все снимки экранов работы кода в этой книге применяют этот новый шрифт.
PSReadLine
это модуль PowerShell, разработанный для предоставления раскрашенного кода PowerShell в
консоли PowerShell. Этот модуль, по умолчанию включённый в PowerShell 7, превращая редактирование в командной строке более простым и более
схожим со свойствами, доступными в оболочках Linux.
PowerShell 7 по умолчанию не устанавливается в Windows, по крайней мере на момент написания этих строк. Команда PowerShell сделала
доступным PowerShell 7.1 доступным из Microsoft Store, что полезно для установки PowerShell 7.1 или более поздних версий в системе Windows 10.
Поскольку Microsoft Store не повсеместно покрывается в установках Windows Server, вы можете устанавливать PowerShell при помощи сценария
Install-PowerShell.ps1
, который вы выгружаете из Интернета, как это показано в данном рецепте. Вы также
можете применять этот рецепт в хостах Windows 10.
Данный рецепт применяет SRV1
, Windows Server хоста рабочей группы. Нет никаких приложений
функциональности, загруженных на этом сервере (пока).
-
Устанавливаем политику исполнения для Windows PowerShell (в новой консоли Windows PowerShell)
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force
-
Установите самые последние версии
NuGet
иPowerShellGet
Install-PackageProvider Nuget -MinimumVersion 2.8.5.201 -Force | Out-Null Install-Module -Name PowerShellGet -Force -AllowClobber
-
Убедитесь что имеется папка
C:\Foo
$LFHT = @{ ItemType = 'Directory' ErrorAction = 'SilentlyContinue' # should it already exist } New-Item -Path C:\Foo @LFHT | Out-Null
-
Выгрузите сценарий установки PowerShell 7
Set-Location C:\Foo $URI = 'https://aka.ms/install-powershell.ps1' Invoke-RestMethod -Uri $URI | Out-File -FilePath C:\Foo\Install-PowerShell.ps1
-
Просмотрите подсказку сценария установки
Get-Help -Name C:\Foo\Install-PowerShell.ps1
-
Установите PowerShell 7
$EXTHT = @{ UseMSI = $true Quiet = $true AddExplorerContextMenu = $true EnablePSRemoting = $true } C:\Foo\Install-PowerShell.ps1 @EXTHT | Out-Null
-
Для любителей приключений - установка предварительной версии и ежедневных сборок
C:\Foo\Install-PowerShell.ps1 -Preview -Destination C:\PWSHPreview | Out-Null C:\Foo\Install-PowerShell.ps1 -Daily -Destination C:\PWSHDailBuild | Out-Null
-
Создайте профили по умолчанию Windows PowerShell
$URI = 'https://raw.githubusercontent.com/doctordns/PACKT-PS7/master/' + '/scripts/goodies/Microsoft.PowerShell_Profile.ps1' $ProfileFile = $Profile.CurrentUserCurrentHost New-Item $ProfileFile -Force -WarningAction SilentlyContinue | Out-Null (Invoke-WebRequest -Uri $URI -UseBasicParsing).Content | Out-File -FilePath $ProfileFile $ProfilePath = Split-Path -Path $ProfileFile $ChildPath = 'Microsoft.PowerShell_profile.ps1' $ConsoleProfile = Join-Path -Path $ProfilePath -ChildPath $ChildPath (Invoke-WebRequest -Uri $URI -UseBasicParsing).Content | Out-File -FilePath $ConsoleProfile
-
Проверка номера загруженной версии PowerShell 7
Get-ChildItem -Path C:\pwsh.exe -Recurse -ErrorAction SilentlyContinue
На Шаге 1 вы открываете новую консоль Windows PowerShell и настраиваете политику исполнения PowerShell на работу без ограничений, что упрощает применение сценариев для настройки хостов. В промышленных применениях вы можете пожелать настроить политику исполнения на более ограниченную. Однако имейте в виду, что политика исполнения это не реальный механизм безопасности - она просто тормозит неопытного администратора.
Для хорошего пояснения Руководящих принципов безопасности PowerShell обратитесь к https://devblogs.microsoft.com/powershell/powershells-security-guiding-principles/.
Галерея PowerShell это репозиторий модулей и сценариев PowerShell и является существенным ресурсом для всех профессионалов ИТ. Данная книга пользуется некоторыми модулями из этой Галереи PowerShell. На Шаге 2 вы обновляете как поставщиков пакетов NuGet (для версии 2.8.5.201 или более поздней) и обновляете версию модуля PowerShellGet.
На протяжении этой книги вы пользуетесь папкой C:\Foo
для хранения различных файлов, которые вы
применяете в сочетании с этими рецептами. На Шаге 3 вы убеждаетесь что эта папка существует.
В настоящее время PowerShell 7 не устанавливается по умолчанию в Windows (или macOS либо Linux), хотя это может и измениться. Чтобы позволить
вам установить PowerShell 7 в Windows вы делаете выборку сценария установки с GitHub и сохраняете её в папке
C:\Foo
. На Шаге 4 вы пользуетесь закладной URL, которая указывает на
GitHub и затем пользуемся Invoke-RestMethod
для выгрузки необходимого файла. Обратите внимание, что
Шаги 1 и 4 не предоставляет никакого вывода.
На Шаге 5 вы видите справочные сведения, содержащиеся в файле подсказки, которые производят следующий вывод:
Обратите внимание, что после установки PowerShell 7, когда вы в самый первый раз вы запускаете Get-Help
у вас запрашивается согласие на выгрузку текста подсказки (что не показано на этом рисунке).
На Шаге 6 вы пользуетесь полученным сценарием установки и выполняете инсталляцию PowerShell 7. Эта команда применяет MSI, который далее устанавливается втихую. Этот MSI обновляет путь исполнения своей системы для добавления папки установки PowerShell 7. Этот код выполняет выборку самой последней поддерживаемой версии PowerShell 7 и вы можете наблюдать его реальное имя файла в следующем выводе:
PowerShell 7 продолжает работу. Каждый день команда PowerShell собирает обновлённые версии PowerShell и предварительные представления выпуска для следующей основной версии. Такие предварительные представления сборок в целом стабильны и позволяют вам попробовать новые функциональные возможности которые придут со следующим основным выпуском. Все ежедневные сборки позволяют вам наблюдать за развитием конкретных ошибок в функциональных возможностях. Вы можете находить полезным устанавливать их обе (и обеспечивать их современное отслеживание со временем).
На Шаге 7 вы устанавливаете ежедневную сборку и самую последнюю сборку предпросмотра, которые выглядят так:
PowerShell пользуется файлами профиля чтобы позволить вам настраивать PowerShell при каждом его запуске (будь то консоль PowerShell или как часть VS Code или ISE). На Шаге 8, вы выгрузили образец сценария профиля и сохранили его локально. Обратите внимание, что тот файл профиля, который мы создали на Шаге 8, предназначен только для Windows PowerShell.
Названием исполняемого файла для PowerShell 7 выступает pwsh.exe
. На
Шаге 9 вы видите номер версий этого файла:
Как вы можете видеть, в SRV1
имеются установленными три версии PowerShell 7: самая последний полный
выпуск, самое последний предпросмотр и сборка текущего дня.
На Шаге 1 Вы открываете новую консоль Windows PowerShell . Убедитесь что вы запускаете эту консоль в качестве локального администратора.
На Шаге 4 вы пользуетесь сокращённым URL для выгрузки необходимого сценария
Install-PowerShell.ps1
. Когда вы применяете Invoke-RestMethod
,
PowerShell обнаруживает лежащий в основе целевой URL для искомого сценария. Такой сокращённый URL позволяет Microsoft и команде PowerShell
публиковать хорошо известные URL, а затем иметь возможность перемещать целевое расположение в случае необходимости. На момент написания
этих строк таким целевым URL выступал https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.ps1.
На Шаге 7 вы устанавливаете версии как самой последней ежедневной сборки, так и самый последний предварительный просмотр. Наблюдаемые вами конкретные версии файлов отличаются от показанных здесь, по крайней мере для версий предпросмотра!
{Прим. пер.: На начало 2022 года имеется стабильная версия PowerShell 7.2.1. Установить её можно
при помощи Диспетчера пакетов командной строки (winget
) следующим образом:
-
Найдите последнюю версию PowerShell
winget search Microsoft.PowerShell Name Id Version Source ----------------------------------------------------------------------- PowerShell Microsoft.PowerShell 7.2.1.0 winget PowerShell Preview Microsoft.PowerShell.Preview 7.3.0-preview.1 winget
-
Установите PowerShell окончательной или предварительной версии, используя параметр
Id
winget install --id Microsoft.Powershell --source winget winget install --id Microsoft.Powershell.Preview --source winget
Подробнее: Установка PowerShell в Windows.}
Для PowerShell 7 названием исполняемого файла PowerShell теперь является, как вы видели это в предыдущем рецепте,
pwsh.exe
. После установки PowerShell 7 в Windows вы можете запустить консоль PowerShell 7,
кликнув Start (Пуск) и набрав pwsh.exe
с последующим нажатием Return
. Установщик MSI PowerShell не создаёт закладок в панели Start
или панели задач.
После установки PowerShell 7, вы можете выполнить это рецепт в SRV1
.
-
Запустите консоль PowerShell 7. На рабочем столе Windows в
SRV1
кликните клавишуWindows
, затем наберитеpwsh
и нажмитеEnter
. -
Просмотрите номер версии PowerShell
$PSVersionTable
-
Просмотрите значение переменной
$Host
$Host
-
Взгляните на значение процесса PowerShell
Get-Process -Id $Pid | Format-Custom MainModule -Depth 1
-
Взгляните на статистику применения ресурсов
Get-Process -Id $Pid | Format-List CPU,*Memory*
-
Обновите подсказку PowerShell
$Before = Get-Help -Name about_* Update-Help -Force | Out-Null $After = Get-Help -Name about_* $Delta = $After.Count - $Before.Count "{0} Conceptual Help Files Added" -f $Delta
-
Сколько команд доступно?
Get-Command | Group-Object -Property CommandType
На Шаге 1 в консоли SRV1
вы запустили PowerShell 7. Эта консоль
должна выглядет как- то так:
На Шаге 2 вы просматриваете значение конкретной версии PowerShell через значение встроенной переменной
$PSVersionTable
, что выглядит примерно так:
На Шаге 3 для определения подробностей относительно своего хоста PowerShell (консоли PowerShell) вы
исследуете значение переменной $Host
, что отображается следующим образом:
Как вы может видеть, значением текущей культуры установлено EN-GB
. В своём случае вы можете обнаружить
иное значение, в зависимости от конкретной применяемой версии Windows Server.
На Шаге 4 вы пользуетесь Get-Process
для того чтобы взглянуть
на подробности своего процесса PowerShell, что выглядит примерно так:
На этом рисунке вы можете видеть значение пути к исполняемому файлу PowerShell . Это значение изменяется в зависимости от того, исполняете ли вы версию официального выпуска, или свои выпуски ежедневный/ предпросмотр.
На Шаге 5 вы можете наблюдать подробности использования ресурсов запущенного в хосте
SRV1
процесса pwsh.exe
:
Конкретные значения для каждого из счётчиков производительности, скорее всего, отличаются и вы можете наблюдать иные значения.
По умолчанию, PowerShell, как и Windows PowerShell, поставляются с минимальным числом файлов подсказок. Вы можете, как вы это видите
а Шаге 6 , воспользоваться командой Update-Help
для выгрузки
обновлённого содержимого подсказок PowerShell, подобно этому:
Как вы можете наблюдать в полученном выводе, не все файлы подсказок были обновлены. В данном случае, например, таков наш модуль
ConfigDefender
, в настоящее время обладающий обновлённой информацией. Также обратите внимание, что могут
отсутствовать подробности подсказок версий UK English, имеются версии US English, которые вы можете установить и которые окажутся полезными.
Между британскими и американскими текстами нет существенной разницы.
Команды в PowerShell включают в свой состав функции, командлеты и псевдонимы. На Шаге 7 вы изучаете сколько команд каждого типа имеется по умолчанию, например, так:
На Шаге 1 вы открыли консоль PowerShell для той версии, которую вы установили в нашем рецепте
Установка PowerShell 7. Для нашего выпуска PowerShell 7.1, то значение номера версии,
которое вы должны видеть, это 7.1.0. На момент чтения данной книги этот номер версии мог двинуться далее. Чтобы убедиться что вы установили
самую последнюю версию PowerShell 7, выполните повторно сценарий PowerShell.ps1
, который мы выгружали в
своём рецепте Установка PowerShell 7.
Кроме того, на Шаге 1, вы могли наблюдать вывод, вырабатываемый предложениями
Write-Host
в вашем файле профиля при вашей настройке в рецепте
Установка PowerShell 7. Вы может удалить эти предложения для снижения общего числа вывода,
который вы наблюдаете всякий раз при запуске вами PowerShell.
На Шаге 4 вы применяете значение переменной $PID
, которая
содержит значение идентификатора своего процесса консоли для процесса Windows. Реальное значение $PID
изменяется при каждом запуске вами PowerShell, но это значение всегда содержит значение идентификатора процесса нашего текущего процесса
консоли.
На Шаге 6 вы можете наблюдать некую ошибку в сведениях подсказок модуля
PSReadLine
(Рисунок 1-10). Разработчики этого
модуля, в своих последних версиях, переименовали этот модуль в PSReadLine
(изменив на заглавную букву L
в Line). Тем не менее, URL подсказок, по ряду причин, чувствительны к регистру. Вы можете исправить это переименовав свой модуль на диске и
изменив на заглавное название папки.
На Шаге 7 вы наблюдаете, что у вас имеются доступными 1786 команд. Это число изменяется, поскольку вы добавляете дополнительные функциональные возможности (и сопровождающие их модули) или выгружаете и устанавливаете модули из таких репозиториев, как Галерея PowerShell.
В PowerShell 7 определённые объекты, добавляемые установщиком PowerShell 7 (и самим PowerShell 7) отличаются от тех, которые применяются Windows PowerShell.
Этот рецепт пользуется SRV1
после установки вами PowerShell 7. В этом рецепте для выполнения
своих шагов мы пользуемся консолью PowerShell 7.
-
Проверяем значение таблицы версии для своей консоли PowerShell 7
$PSVersionTable
-
Исследуем папку установки PowerShell 7
Get-Childitem -Path $env:ProgramFiles\PowerShell\7 -Recurse | Measure-Object -Property Length -Sum
-
Просматриваем JSON файл конфигурации PowerShell 7
Get-ChildItem -Path $env:ProgramFiles\PowerShell\7\powershell*.json | Get-Content
-
Проверяем значение изначальной Политики выполнения для PowerShell 7.
Get-ExecutionPolicy
-
Просматриваем свои папки модулей
$I = 0 $ModPath = $env:PSModulePath -split ';' $ModPath | Foreach-Object { "[{0:N0}] {1}" -f $I++, $_ }
-
Проверяем свои модули
$TotalCommands = 0 Foreach ($Path in $ModPath){ Try { $Modules = Get-ChildItem -Path $Path -Directory -ErrorAction Stop "Checking Module Path: [$Path]" } Catch [System.Management.Automation.ItemNotFoundException] { "Module path [$path] DOES NOT EXIST ON $(hostname)" } $CmdsInPath = 0 Foreach ($Module in $Modules) { $Cmds = Get-Command -Module ($Module.name) $TotalCommands += $Cmds.Count } }
-
Просматриваем значение общего числа команд и модулей
$Mods = (Get-Module * -ListAvailable | Measure-Object).count "{0} modules providing {1} commands" -f $Mods,$TotalCommands
На Шаге 1 вы изучаете значение переменной $PSVersionTable
для
просмотра сведений значения версии для PowerShell 7, которые выглядят как- то так:
Программа установки PowerShell 7 устанавливает в папку (по умолчанию), отличающуюся от той, которая используется Windows PowerShell. На Шаге 2 вы видите суммарные сведения о тех файлах, которые установлены в папке установки PowerShell 7 следующим образом:
PowerShell 7 хранит значения конфигурации в файле JSON в папке установки PowerShell 7. На Шаге 3 вы видите содержимое этого файла:
На Шаге 4 вы просматриваете политику выполнения PowerShell 7:
Как и в случае с Windows PowerShell, PowerShell 7 загружает команды из модулей. PowerShell для определения в каких папках PowerShell 7
хранятся эти модули файлов применяет свою переменную $PSModulePath
. Просмотр содержимого и изучение папок
на Шаге 5 выглядит так:
С определёнными так папками (по умолчанию), вы можете проверить сколько команд имеется в каждой из папок, на Шаге 6 их вывод выглядит подобно этому:
На Шаге 7 вы можете просмотреть результаты того, сколько команд имеется в каждом из модулей в каждом из путей модулей. Вывод выглядит примерно так:
На Шаге 1 вы просматриваете таблицу версии. В зависимости от того, когда вы читаете эту книгу, видимые номера версий могут быть более поздними, нежели отображённые здесь. Вы наблюдаете это когда выпуски команды PowerShell обновляют версию PowerShell.
На Шаге 4 вы просматриваете политику выполнения PowerShell 7. При каждом запуске PowerShell 7, он
считывает соответствующий файл JSON для получения необходимых значений политики выполнения. Вы можете применять командлет политики
Set-Execution
для немедленного сброса установленной политики, или изменить это значение в своём файле JSON
и перезапустить консоль PowerShell.
На Шаге 5 вы просматриваете подробности папок, которые PowerShell 7 применяет для поиска модуля (по умолчанию). Самая первая папка это ваши персональные модули, за ними следуют PowerShell и потом модули Windows PowerShell. Мы рассмотрим более подробно совместимость модулей Windows PowerShell и PowerShell в Главе 2, Введение в PowerShell 7.
В Windows PowerShell и PowerShell 7 файлы профиля это сценарии PowerShell, которые PowerShell исполняет всякий раз когда вы запускаете новый экземпляр PowerShell (будь то консоль, ISE или VS Code). Эти файлы позволяют вам выполнять предварительное конфигурирование PowerShell 7. Вы можете добавлять переменные, PSDrives PowerShell, функции и дополнительно применяемые профили. Что касается данной книги, вы выгружаете и устанавливаете изначальные файлы профиля на основе образцов, которые вы можете выгружать из GitHub.
Этот рецепт выгружает и устанавливает необходимые файлы профиля для нашей консоли PowerShell 7.
Вы можете выполнить этот рецепт в SRV1
после установки вами PowerShell 7.
-
Обнаруживаем имена файлов своих профилей
$ProfileFiles = $PROFILE | Get-Member -MemberType NoteProperty $ProfileFiles | Format-Table -Property Name, Definition
-
Проверяем присутствие каждого файла профиля PowerShell
Foreach ($ProfileFile in $ProfileFiles){ "Testing $($ProfileFile.Name)" $ProfilePath = $ProfileFile.Definition.split('=')[1] If (Test-Path $ProfilePath){ "$($ProfileFile.Name) DOES EXIST" "At $ProfilePath" } Else { "$($ProfileFile.Name) DOES NOT EXIST" } "" }
-
Отображаем значение профиля текущего пользователя/ текущего хоста
$CUCHProfile = $PROFILE.CurrentUserCurrentHost "Current User/Current Host profile path: [$CUCHPROFILE]"
-
Создаём профиль текущего пользователя/ текущего хоста для своей консоли PowerShell 7
$URI = 'https://raw.githubusercontent.com/doctordns/PACKT-PS7/master/' + 'scripts/goodies/Microsoft.PowerShell_Profile.ps1' New-Item $CUCHProfile -Force -WarningAction SilentlyContinue | Out-Null (Invoke-WebRequest -Uri $URI).Content | Out-File -FilePath $CUCHProfile
-
Выходим из своей консоли PowerShell 7
Exit
-
Перезапускаем свою консоль PowerShell 7 и просматриваем получаемый вывод профиля при запуске
Get-ChildItem -Path $Profile
На Шаге 1 вы обнаруживаете значения названий каждого из четырёх файлов профилей (для нашей консоли PowerShell ), затем просматриваете их названия и местоположение (то есть, их определение), что выглядит так:
На Шаге 2 вы проверяете какие из этих файлов профиля, когда они имеются, существуют, что выглядит следующим образом:
На Шаге 3 вы получаете и отображаете значение названия файла для файла профиля текущего пользователя/ текущего хоста, и это представляется так:
На Шаге 4 вы создаёте изначальный файл профиля текущего пользователя/ текущего хоста. Этот файл является частью того репозитория GitHub, который поддерживает данную книгу. На Шаге 5 вы покидаете свою текущую консоль PowerShell 7 хоста. Эти шаги не предоставляют никакого вывода.
На Шаге 6 вы запускаете новый профиль PowerShell. На этот раз вы здесь можете наблюдать, что этот файл профиля существует, исполняется и персонализирует вашу консоль:
На Шаге 4 вы выгружаете образец файла профиля с GitHub. Этот образец файла профиля содержит
персонализацию для конфигурации консоли PowerShell, включая изменение стартовой папки по умолчанию (на
C:\Foo
) и создание некоторых псевдонимов, устройств PowerShell и объекта полномочий. Этот представленный
образец содержимого вы можете рассматривать включённым в файл профиля вашей консоли. Обратите внимание на то, что устанавливаемый вами в
нашем следующем рецепте VS Code применяет отдельный файл профиля текущего пользователя/ текущего хоста, что делает для вас возможной различную
персонализацию PowerShell в консоли и в VS Code.
ISE Windows PowerShell был великолепным инструментом, который Microsoft впервые ввёл в Windows PowerShell v2 (и чрезвычайно улучшил в v3). Этот инструмент обогатил завершённость функциональности и Microsoft не имеет планов по его дальнейшей разработке.
Однако, его замещает Visual Studio Code, или VS Code. Этот инструмент с открытым исходным кодом предоставляет расширенный диапазон функциональных возможностей для профессионалов ИТ и всех прочих. Для ИТ профессионалов это должен быть редактор вашего выбора. Хотя и существует некая кривая обучения (как и для всякого прочего продукта), VS Code содержит все те свойства, которые вы можете находить в ISE и даже больше.
VS Code, а также доступные для него расширения, работают над развитием. Всякий новый выпуск привносит дополнительные функциональные возможности, которые могут быть весьма ценными. Последнее добавление от Draw.io, например, это возможность создания схем непосредственно в VS Code. Загляните в следующий пост для дополнительных сведений относительно этого инструмента схем: https://tfl09.blogspot.com/2020/05/over-weekend-i-saw-tweet-announcing-new.html.
Имеется большое число прочих расширений, которые вы могли бы применять, в зависимости от своих рабочих процессов. Для получения дополнительных сведений относительно VS Code обращайтесь к https://code.visualstudio.com/.
За подробными сведениями относительно большого числа расширений VS Code вы можете обратиться к https://code.visualstudio.com/docs/editor/extension-marketplace.
Вы можете выполнить этот рецепт в SRV1
после установки вами PowerShell 7 и создания файла профиля
консоли.
-
Выгрузите сценарий установки VS Code из Галереи PowerShell
$VSCPATH = 'C:\Foo' Save-Script -Name Install-VSCode -Path $VSCPATH Set-Location -Path $VSCPATH
-
Выполните этот сценарий установки и добавьте некоторые популярные расширения
$Extensions = 'Streetsidesoftware.code-spell-checker', 'yzhang.markdown-all-in-one', 'hediet.vscode-drawio' $InstallHT = @{ BuildEdition = 'Stable-System' AdditionalExtensions = $Extensions LaunchWhenDone = $true } .\Install-VSCode.ps1 @InstallHT
-
Покиньте VS Code. Закройте окно VS Code.
-
Перезапустите VS Code в качестве администратора.
Кликните по клавише
Windows
и наберитеcode
, что доставит в панель Start Windows плитку VS Code. Затем кликните по этой плитке VS Code и выберите Run as Administrator для запуска VS Code от имени администратора. -
Откройте новое окно терминала VS Code. Внутри VS Code нажмите
Ctrl + Shift + `
. -
Для VS Code создайте новый профиль текущего пользователя/ текущего хоста
$SAMPLE = 'https://raw.githubusercontent.com/doctordns/PACKT-PS7/master/' + 'scripts/goodies/Microsoft.VSCode_profile.ps1' (Invoke-WebRequest -Uri $Sample).Content | Out-File $Profile
-
Обновите настройки своего пользователя для VS Code
$JSON = @' { "workbench.colorTheme": "PowerShell ISE", "powershell.codeFormatting.useCorrectCasing": true, "files.autoSave": "onWindowChange", "files.defaultLanguage": "powershell", "editor.fontFamily": "'Cascadia Code',Consolas,'Courier New'", "workbench.editor.highlightModifiedTabs": true, "window.zoomLevel": 1 } '@ $JHT = ConvertFrom-Json -InputObject $JSON -AsHashtable $PWSH = "C:\\Program Files\\PowerShell\\7\\pwsh.exe" $JHT += @{ "terminal.integrated.shell.windows" = "$PWSH" } $Path = $Env:APPDATA $CP = '\Code\User\Settings.json' $Settings = Join-Path $Path -ChildPath $CP $JHT | ConvertTo-Json | Out-File -FilePath $Settings
-
Создайте закладку для VS Code
$SourceFileLocation = "$env:ProgramFiles\Microsoft VS Code\Code.exe" $ShortcutLocation = "C:\foo\vscode.lnk" # Create a new wscript.shell object $WScriptShell = New-Object -ComObject WScript.Shell $Shortcut = $WScriptShell.CreateShortcut($ShortcutLocation) $Shortcut.TargetPath = $SourceFileLocation #Save the Shortcut to the TargetPath $Shortcut.Save()
-
Создайте закладку для PowerShell 7
$SourceFileLocation = "$env:ProgramFiles\PowerShell\7\pwsh.exe" $ShortcutLocation = 'C:\Foo\pwsh.lnk' # Create a new wscript.shell object $WScriptShell = New-Object -ComObject WScript.Shell $Shortcut = $WScriptShell.CreateShortcut($ShortcutLocation) $Shortcut.TargetPath = $SourceFileLocation # Save the Shortcut to the TargetPath $Shortcut.Save()
-
Создайте и обновите некую схему XML
$XML = @' <?xml version="1.0" encoding="utf-8"?> <LayoutModificationTemplate xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification" xmlns:defaultlayout= "http://schemas.microsoft.com/Start/2014/FullDefaultLayout" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout" xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout" Version="1"> <CustomTaskbarLayoutCollection> <defaultlayout:TaskbarLayout> <taskbar:TaskbarPinList> <taskbar:DesktopApp DesktopApplicationLinkPath="C:\Foo\vscode.lnk" /> <taskbar:DesktopApp DesktopApplicationLinkPath="C:\Foo\pwsh.lnk" /> </taskbar:TaskbarPinList> </defaultlayout:TaskbarLayout> </CustomTaskbarLayoutCollection> </LayoutModificationTemplate> '@ $XML | Out-File -FilePath C:\Foo\Layout.Xml
-
Импортируйте файл XML своей стартовой схемы
Import-StartLayout -LayoutPath C:\Foo\Layout.Xml -MountPath C:\
-
Завершите сеанс
logoff.exe
-
Снова зарегистрируйтесь в Windows и посмотрите на панель задач
-
Запустите консоль PowerShell через созданную закладку
-
Запустите VS Code из новой закладки в панели задач и просмотрите исполнение соответствующего файла профиля
>
На Шаге 1 вы выгружаете сценарий установки VS Code из Галереи PowerShell. Этот этап не предоставляет никакого вывода.
На Шаге 2 вы запускаете выгруженный сценарий установки и добавляете три особых расширения. Выполнение данного этапа в консоли PowerShell 7 выглядит примерно так:
После запуска VS Code вы обнаружите первоначальное открытие окна, которое выглядит следующим образом:
На Шаге 3 вы закрываете это окно. Затем, на Шаге 4, вы запускаете VS Code в качестве администратора. На Шаге 5 вы открываете новый Терминал VS Code и запускаете PowerShell , который теперь выглядит так:
На Шаге 6 вы создаёте образец файла профиля VS Code. Расширение PowerShell VS Code применяет этот
файл профиля при открытии некого файла .ps1
. Данный шаг не выдаёт никакого вывода.
На Шаге 7 вы обновляете некоторые параметры времени выполнения VS Code. На Шаге 8 вы создаёте закладку для VS Code, а на Шаге 9 вы создаёте закладку для консоли PowerShell . Вы применяете эти закладки позднее в данном рецепте для создания закладок в своей панели задач Windows.
На Шаге 10 вы обновляете тот XML, который описывает панель задач Windows для добавления созданных вами ранее закладок на VS Code и консоль PowerShell. На Шаге 11 вы импортируете обновлённое описание панели задач обратно в Windows. Этот этап не производит как такового никакого вывода.
Далее, на Шаге 12 вы выходите из Windows. На Шаге 13 вы повторно регистрируетесь и замечаете обновлённую панель задач, которую можно наблюдать здесь:
На Шаге 14 вы открываете свою консоль PowerShell 7, что выглядит так:
На Шаге 15 вы открываете VS Code, что выглядит следующим образом:
На Шаге 2 вы устанавливаете VS Code и три дополнительных расширения. Устанавливаемое расширение
Streetsidesoftware.code-spell-checker
предоставляет проверку орфографии для ваших сценариев и
прочих файлов. Следующее расширение yzhang.markdown-all-in-one
поддерживает применение Markdown {облегчённого
языка разметки}. Это расширение полезно когда, например, вы пишите документацию в GitHub или обновляете имеющиеся общедоступные справочные
сведения PowerShell 7. Ещё одно расширение hediet.vscode-drawio
позволяет вам создавать богатые
схемы непосредственно в VS Code посетите Marketplace VS Code для получения дополнительных сведений по этому и прочим расширениям.
На Шаге 4 вы убеждаетесь что выполняете VS Code в качестве администратора. Некий код требует этого и отказывает вам когда вы не исполняете PowerShell (внутри VS Code) от имени администратора.
На Шаге 5 вы открываете некий терминал внутри VS Code. В VS Code такой "терминал" изначально это консоль PowerShell. Вы можете наблюдать получаемый вывод результатов запуска соответствующего файла профиля для Windows PowerShell. Именно этот терминал вы наблюдаете по умолчанию внутри VS Code.
На Шаге 7 вы обновляете и сохраняете некоторые настройки своего VS Code. Обратите внимание, что на этом шаге вы сообщаете VS Code где обнаруживать ту версию PowerShell, которую вы бы желали запускать. Если вы пожелаете, вы можете изменить это запуск на версию предварительного просмотра PowerShell или даже на ежедневную сборку.
Заметьте, что VS Code, по существу, обладает в игре двумя файлами профилей PowerShell. Когда вы открываете VS Code в нём самом, вы получаете
тот терминал, который вы наблюдали на Шаге 5 - это ваш терминал по умолчанию. VS Code PowerShell
запускает отдельный терминал всякий раз, когда вы открываете некий файл .ps1
. В этом случае VS Code
запускает особый для него профиль, который вы установили на Шаге 6.
На Шаге 8 и Шаге 9 вы создаёте закладки для VS Code и консоли PowerShell. На Шаге 10 вы обновляете схему панели задач Windows для включения в неё созданных закладок. К сожалению, вам придётся покинуть сеанс (что вы и выполняете на Шаге 12 перед тем как вы зарегистрируетесь обратно, когда вы сможете применять эти две закладки.
В качестве части запуска VS Code Microsoft также создал новый и бесплатный шрифт, который вы можете выгружать и применять как в своей консоли PowerShell, так и внутри VS Code. Данный рецепт показывает как вы можете выгрузить этот шрифт, установить его и настроить этот шрифт по умолчанию\ для VS Code.
Вы можете выполнить этот рецепт в SRV1
после установки вами как PowerShell 7, так и VS Code.
-
Получаем местоположение выгрузки для своего шрифта Cascadia Code
$CascadiaFont = 'Cascadia.ttf' # font file name $CascadiaRelURL = 'https://github.com/microsoft/cascadia-code/releases' $CascadiaRelease = Invoke-WebRequest -Uri $CascadiaRelURL # Get all $CascadiaPath = "https://github.com" + ($CascadiaRelease.Links.href | Where-Object { $_ -match "($CascadiaFont)" } | Select-Object -First 1) $CascadiaFile = "C:\Foo\$CascadiaFont"
-
Выгружаем файл шрифта Cascadia Code
Invoke-WebRequest -Uri $CascadiaPath -OutFile $CascadiaFile
-
Устанавливаем шрифт Cascadia Code
$FontShellApp = New-Object -Com Shell.Application $FontShellNamespace = $FontShellApp.Namespace(0x14) $FontShellNamespace.CopyHere($CascadiaFile, 0x10)
-
Перезапускаем VS Code, кликнув по закладке в панели задач
>
На Шаге 1 вы обнаруживаете самую последнюю версию шрифта Cascadia Code, а на Шаге 4 выгружаете это шрифт.
На Шаге 3 вы устанавливаете полученный шрифт в Windows. Поскольку Windows не предоставляет никаких
командлетов для выполнения установки шрифта, вы полагаетесь на более ранний объект COM Windows
Shell.Application
.
На Шаге 4 вы перезапускаете VS Code и замечаете, что новый шрифт выглядит подобно следующему:
Как и во многих прочих моментах при персонализации PowerShell 7, у вас имеется широкий диапазон шрифтов для применения их с VS Code. Шрифт Cascadia Code хорош собой, ясный шрифт и многим он нравится. Вы всегда можете изменить его, если он вам не приглянулся.
PSReadLine
это модуль PowerShell, который предоставляет дополнительные функциональные возможности
редактирования в консоли как внутри PowerShell 7, так и внутри PowerShell. Это модуль предоставляет практику редактирования в командной строке,
которая сопоставима с наилучшими оболочками командной строки Linux (такими как Bash).
Когда вы выполняете набор в консоли PowwerShell, PSReadLine
перехватывает ваши нажатия клавиш для
предоставления контроля синтаксиса, простейшего уведомления о синтаксических ошибках и много чего ещё.
PSReadLine
позволяет вам персонализировать вашу среду для её подгонки под ваши личные предпочтения. Некоторые
ключевые функциональные возможности этого модуля составляют:
-
Синтаксический контроль записей командной строки
-
Редактирование множества строк
-
Управление историей
-
Настраиваемые привязки клавиш
-
Высокая настраиваемость
За обзором PSReadLine
обратитесь к https://docs.microsoft.com/powershell/module/psreadline/about/about_psreadline. А дополнительные подробности вы можете увидеть в
файле README GitHub PSReadLine
: https://github.com/PowerShell/PSReadLine/blob/master/README.md.
Некая важная проблема имеется относительно именования этого модуля. Первоначальным названием данного модуля было
PSReadline
. В некий момент времени разработчики этого модуля изменили его название на
PSReadLine
(изменив на заглавный символ L в самом названии модуля).
Сам модуль PSReadLine
поставляется естественным образом с PowerShell 7. При запуске, обе консоли, и
VS Code, и PowerShell импортируют PSReadLine
с тем, чтобы он был готов к применению. Вы также можете пользоваться
PSReadLine
в Windows PowerShell. Для упрощения обновлений подсказок этого модуля, рассмотрите возможность
переименования данного модуля на заглавную L в PSReadLine
.
Работа над PSReadLine
находится в её развитии. Microsoft инкорпорировал самую раннюю версию данного
модуля внутри Windows PowerShell v3. Windows PowerShell 5.1 (а также его ISE) внутри Windows Server снабжаются
PSReadLine
v2. Если вы всё ещё пользуетесь более ранними версиями PowerShell, вы можете выгрузить и применять
самую последнюю версию PSReadLine
.
Данный модуль улучшился и, по сравнению с выпуском v2 этого модуля, были внесены некоторые изменения, не имеющие обратной совместимости.
Многие статьи блогов, к примеру, пользуются более ранним синтаксисом для Set-PSReadLineOption
, который отказывает
в версии 2 (и последующих) данного модуля. Вы можете всё ещё наблюдать такой старый синтаксис, когда вы пользуетесь механизмом поиска для
обнаружения примеров. Кроме того, некоторые из примеров в данном рецепте будут отказывать, если запустите их при помощи
PSReadLine
v1 (выполненным со старым синтаксическим анализом имён модуля).
Вы можете выполнить этот рецепт в SRV1
после установки вами как PowerShell 7, VS Code и нашего
шрифта Cascadia Code (а также после персонализации своей среды).
-
Получаем необходимые команды в модуль
PSReadLine
Get-Command -Module PSReadLine
-
Получаем самые первые 10 обработчиков клавиш
PSReadLine
Get-PSReadLineKeyHandler | Select-Object -First 10 | Sort-Object -Property Key | Format-Table -Property Key, Function, Description
-
Подсчитываем число не привязанных обработчиков клавиш
$Unbound = (Get-PSReadLineKeyHandler -Unbound).count "$Unbound unbound key handlers"
-
Получаем параметры
PSReadLine
Get-PSReadLineOption
-
Определяем название темы своего VS Code
$Path = $Env:APPDATA $CP = '\Code\User\Settings.json' $JsonConfig = Join-Path $Path -ChildPath $CP $ConfigJSON = Get-Content $JsonConfig $Theme = $ConfigJson | ConvertFrom-Json | Select-Object -ExpandProperty 'workbench.colorTheme'
-
Изменяем цветовую схему когда название темы
Visual Studio Light
If ($Theme -eq 'Visual Studio Light') { Set-PSReadLineOption -Colors @{ Member = "`e[33m" Number = "`e[34m" Parameter = "`e[35m" Command = "`e[34m" } }
На Шаге 1 вы видите команды в своём модуле PSReadLine
,
которые выглядят так:
На Шаге 2 вы отображаете применяемые в настоящее время самые первые 10 обработчиков клавиш, что отображается ниже:
PSReadLine
предоставляет более 160 внутренних функций, к которым вы можете привязывать комбинации
клавиш, на Шаге 3 вы выявляете сколько функций в данный момент не привязаны, что представляется
следующим образом:
На Шаге 4 вы просматриваете параметры PSReadLine
,
которые вы можете наблюдать тут:
На Шаге 5 и на Шаге 6 вы определяете текущее название темы VS Code и
обновляете цвета, применяемые PSReadLine
для лучшей ясности. Эти два шага не производят никакого вывода, хотя
вы и можете наблюдать изменение отображаемых цветов определённых синтаксических лексем PowerShell (для того чтобы увидеть эти изменения, выполните
Get-PSReadLineOption
).
На Шаге 1 вы представляете команды внутри модуля PSReadLine
.
Функция PSConsoleHostReadLine
выступает точкой входа для функциональности этого модуля. Когда
запускается консоль PowerShell, она загружает данный модуль и активирует данную функцию
PSConsoleHostReadLine
.
Одним из небольших недостатков PSReadLine
является то, что он не работает должным образом со всеми
программами чтения экрана Windows. По причинам доступности, когда консоль PowerShell определяет что вы пользуетесь какой- то программой
считывания экрана, процесс запуска вашей консоли не загружает PSReadLine
. Вы всегда можете загрузить
PSReadLine
вручную, либо в самой консоли, либо через обновление своего профиля (профилей) запуска.
На Шаге 2 вы просматриваете обработчики клавиш, применяемые в настоящее время
PSReadLine
. Каждый обработчик соответствует некой комбинации клавиш (к примеру,
Ctrl + L
) для одной из более чем 160 внутренних функций
PSReadLine
. По умолчанию, Ctrl + L
соответствует функции
ClearScreen
- когда вы нажимаете эту последовательность клавиш,
PSReadLine
очищает ваш экран в консоли.
На Шаге 5 и на Шаге 6 вы определяете название темы VS Code
и регулируете цветовую схему под свои предпочтения. До некоторой степени, PSReadLine
и темы VS Code
могут в результате приводить затруднительные для чтения сочетания. В таком случае вы можете настаивать на определённых настройках в своём файле
профиля VS Code и изменять устанавливаемую цветовую схему под соответствие своим вкусам.