Новые возможности в PowerShell Core 6.2

В выпуске PowerShell Core 6.2 основное внимание уделено повышению производительности, исправлению ошибок, а также небольшим усовершенствованиям командлетов и языка, улучшающим качество. Полный список улучшений можно увидеть в наших подробных журналах изменений на сайте GitHub.

Экспериментальные возможности

Ранее мы добавили поддержку экспериментальных возможностей. В выпуске 6.2 имеются четыре экспериментальные возможности. Оставьте отзыв по этим возможностям, чтобы мы могли внести улучшения и решить, стоит ли переводить их в статус базовых.

Используйте командлет Get-ExperimentalFeature, чтобы получить список доступных экспериментальных возможностей. Их можно включить и отключить с помощью Enable-ExperimentalFeature и Disable-ExperimentalFeature соответственно.

Предложения "Команда не найдена"

Эта возможность использует нечеткое соответствие, чтобы найти предложения для команд или командлетов, в которых вы, возможно, допустили опечатку.

Enable-ExperimentalFeature -Name PSCommandNotFoundSuggestion

Пример

В этом примере имя командлета с ошибками нечетко соответствует нескольким предложениям от наиболее до наименее вероятных.

Get-Commnd
Get-Commnd : The term 'Get-Commnd' is not recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify that the path
is correct and try again.
At line:1 char:1
+ Get-Commnd
+ ~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (Get-Commnd:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException


Suggestion [4,General]: The most similar commands are: Get-Command, Get-Content, Get-Job, Get-Module,
Get-Event, Get-Host, Get-Member, Get-Item, Set-Content.

Пакетная обработка неявного удаленного взаимодействия

При использовании неявного удаленного взаимодействия в конвейере PowerShell обрабатывает каждую команду в конвейере независимо. Во время работы конвейера объекты периодически сериализуются и десериализуются (de-serialized) между клиентом и удаленной системой.

С помощью этой возможности PowerShell анализирует конвейер, чтобы определить, является ли команда безопасной для выполнения и существует ли она в целевой системе. Если значение TRUE, PowerShell выполняет весь конвейер удаленно и сериализует и десериализует (de-serializes) обратно в клиент только результаты.

Enable-ExperimentalFeature -Name PSImplicitRemotingBatching

Реальное тестирование Get-Process | Sort-Object через localhost уменьшается с 10–15 секунд до 20–30 миллисекунд. Эта возможность должна быть включена только в клиенте. Изменения на сервере не требуются.

Временной диск

Enable-ExperimentalFeature -Name PSTempDrive

Если вы используете PowerShell Core в различных операционных системах, вы обнаружите, что переменная среды для поиска временного каталога отличается в Windows, macOS и Linux. Благодаря этой возможности вы получаете диск PSDrive с именем Temp:, который автоматически сопоставляется с временной папкой для используемой операционной системы.

Пример

PS> "Hello World!" > Temp:/hello.txt
PS> Get-Content Temp:/hello.txt
Hello World!

Имейте в виду, что исходным системным командам с файлами (например, ls в Linux) неизвестно о дисках PSDrive и для них этот диск Temp: не будет отображаться.

Расширение сокращения

Командлеты PowerShell должны иметь описательные существительные. Из-за этого у них длинные имена, которые сложнее вводить. Эта возможность позволяет вам просто вводить командлет прописными символами и использовать заполнение нажатием клавиши TAB для поиска совпадений.

Enable-ExperimentalFeature -Name PSUseAbbreviationExpansion

Пример

PS> i-arsavsf

Если вы нажмете клавишу TAB при наличии установленного модуля Azure PowerShell Az, автоматически подставится такое:

PS> Import-AzRecoveryServicesAsrVaultSettingsFile

Примечание

Эта возможность предназначена для интерактивного использования. Сокращенные формы командлетов выполнить невозможно. Эта возможность не используется в качестве замены псевдонимов.

Критические изменения

  • Поведение командлета -NoEnumerate в Write-Output исправлено для согласованности с Windows PowerShell. (№ 9069)
  • Сделайте Join-String -InputObject 1,2,3 результат равным результату 1,2,3 | Join-String (No 8611) (выражаем благодарность) @sethvs!)
  • Добавление -Stable в Sort-Object тесты и связанные с ними (No 7862) (выражаем благодарность) @KirkMunro!)
  • Улучшен Start-Sleep командлет для приема доли секунд (No 8537) (выражаем благодарность) @Prototyyppi!)
  • Хэш-таблица изменена для использования параметра OrdinalIgnoreCase со значением case-insensitive на всех языках (№ 8566).
  • Исправлена функция LiteralPath в Import-Csv для привязки к выходным Get-ChildItem данным (No 8277) (выражаем благодарность) @iSazonov!)
  • Больше не пропускает столбец без имени, если в Import-Csv (No 7899) используется разделитель двойных кавычек (выражаем благодарность) @Topping!)
  • Командлет Get-ExperimentalFeature больше не имеет параметр -ListAvailable (№ 8318).
  • Теперь параметр debug задает $DebugPreference значение Continue вместо Inquire (No 8195) (Выражаем благодарность). @KirkMunro!)
  • Параметр -OutputFormat учитывается, если указан в неинтерактивной, перенаправленной, закодированной команде, используемой с pwsh (№ 8115).
  • Сборка загружается из базового пути к модулю перед попыткой загрузить из глобального кэша сборок (№ 8073).
  • Удалена тильда из предварительной версии пакетов Linux (№ 8244).
  • Обработка -WorkingDirectory теперь выполняется перед обработкой профилей (№ 8079).
  • Не добавляйте PATHEXT переменную среды в Unix (No 7697) (выражаем благодарность) @iSazonov!)

Известные проблемы

  • При удаленном взаимодействии на платформах ARM Windows IоT возникает проблема с загрузкой модулей. См. № 8053.

Общие обновления и исправления

  • Разрешено заполнение нажатием клавиши TAB без учета регистра для файлов и папок в файловой системе с учетом регистра (№ 8128).
  • Сделайте PSVersionInfo.PSVersion и PSVersionInfo.PSEdition общедоступными (No 8054) (выражаем благодарность) @KirkMunro!)
  • Добавление вывода типа для $_ / $PSItem в catch{ } блоках (No 8020) (выражаем благодарность) @vexx32!)
  • Исправлен вывод типа вызова статического метода (No 8018) (выражаем благодарность) @SeeminglyScience!)
  • Create выведенные типы для Select-Object, Group-ObjectPSObject и Hashtable (No 7231) (выражаем благодарность)@powercode!)
  • Предоставлена поддержка вызова метода с параметрами типа ByRef-like (№ 7721).
  • Добавлена обработка случая, когда путь к модулю Windows PowerShell уже находится в PSModulePath среды (№ 7727).
  • Включены командлеты SecureString для отличающихся от Windows продуктов с сохранением обычного текста (№ 9199).
  • Улучшено сообщение об ошибке в отличающихся от Windows продуктах при импорте CLIXML-файла с использованием securestring (№ 7997).
  • Добавление параметра ReplyTo в Send-MailMessage (No 8727) (выражаем благодарность) @replicaJunction!)
  • Добавлено сообщение об устаревшем объекте для параметра Send-MailMessage (№ 9178).
  • Исправлена ошибка с командлетом Restart-Computer: теперь он работает с localhost при отсутствии WinRM (№ 9160).
  • Теперь командлет Start-Job возвращает критическую ошибку при размещении PowerShell (№ 9128).
  • Добавлены ускорители типов стилей C# и суффиксы для литералов ushort, uint, ulong и коротких литералов (No 7813) (выражаем благодарность). @vexx32!)
  • Добавлены новые суффиксы для числовых литерал — см . about_Numeric_Literals (No 7901) (выражаем благодарность). @vexx32!)
  • Правильно сообщить о уровне влияния, если параметр SupportsShouldProcess не имеет значение "true" (No 8209) (выражаем благодарность) @vexx32!)
  • Исправление проблем с набором символов запроса в веб-командлетах (No 8742) (выражаем благодарность) @markekraus!)
  • Исправление проблемы с веб-командлетами 100-continue (No 8679) (выражаем благодарность) @markekraus!)
  • Исправлена проблема с блокировкой файлов с веб-командлетами (No 7676) (выражаем благодарность) @Claustn!)
  • Исправлена проблема с анализом кодовой страницы в Invoke-RestMethod (No 8694) (выражаем благодарность) @markekraus!)
  • Выполнен рефакторинг командлета ConvertTo-Json для предоставления JsonObject.ConvertToJson в качестве общедоступного API (№ 8682).
  • Добавление настраиваемой максимальной глубины в ConvertFrom-Json с помощью -Depth (No 8199) (выражаем благодарность) @louistio!)
  • Добавление параметра EscapeHandling в ConvertTo-Json командлет (No 7775) (выражаем благодарность) @iSazonov!)
  • Добавлен параметр -CustomPipeName в pwsh и Enter-PSHostProcess (№ 8889).
  • Добавлена возможность создания относительных символических ссылок в Windows с помощью New-Item (№ 8783).
  • Пользователям Windows разрешено в режиме разработчика создавать символические ссылки без повышения прав (№ 8534).
  • Теперь командлет Write-Information принимает $null (№ 8774).
  • Командлет Get-Help исправлен для расширенных функций с содержимым справки MAML (№ 8353).
  • Исправлена Get-Help проблема PSTypeName с параметром -Parameter, когда объявлен только один параметр (No 8754) (выражаем благодарность). @pougetat!)
  • Исправлено вычисление токена для командлета Get-Help, выполненного в ScriptBlock для справки в комментариях (#8238) (Спасибо @hubuk!)
  • Измените Get-Help командлет -Parameter, чтобы он принимал массивы строк (No 8454) (выражаем благодарность). @sethvs!)
  • Разрешение PAGER, если путь содержит пробелы (No 8571) (выражаем благодарность) @pougetat!)
  • Добавлен запрос при использовании less в функции help, чтобы указать пользователю, как выйти (№ 7998).
  • Добавлена поддержка типов перечислений и символов в Format-Hex командлете (No 8191) (выражаем благодарность). @iSazonov!)
  • Удален параметр ShouldProcess из командлета Format-Hex (№ 8178).
  • Добавление новых параметров Offset и Count в Format-Hex командлет и рефакторинг командлета (No 7877) (выражаем благодарность). @iSazonov!)
  • Разрешить "name" в качестве ключа псевдонима для "label" в ConvertTo-Html, разрешить запись "width" быть целым числом (No 8426) (выражаем благодарность). @mklement0!)
  • Повторная работа вычисляемых свойств на основе scriptblock в ConvertTo-Html (No 8427) (выражаем благодарность) @mklement0!)
  • Добавлен командлет Join-String для создания текста из входных данных конвейера (No 7660) (выражаем благодарность). @powercode!)
  • Исправлена Join-String логика параметров FormatString командлета (No 8449) (выражаем благодарность). @sethvs!)
  • Функция Clear-Host снова использует $RAWUI и работает через удаленное взаимодействие (№ 8609).
  • Название функции Clear-Host изменено на простое имя [console]::clear, и псевдоним clear удален из Unix (№ 8603).
  • Исправлена ошибка LiteralPath в для Import-Csv привязки к выходным Get-ChildItem данным (No 8277) (выражаем благодарность) @iSazonov!)
  • Функция справки не должна использовать пейджер для AliasHelpInfo (№ 8552).
  • Добавление -UseMinimalHeader в , Start-Transcript чтобы свести к минимуму заголовок расшифровки (No 8402) (выражаем благодарность) @lukexjeremy!)
  • Добавлены командлеты Enable-ExperimentalFeature и Disable-ExperimentalFeature (№ 8318).
  • Теперь все командлеты из PSDiagnostics предоставлены, если доступно средство logman.exe (№ 8366).
  • Удаление параметра Persist из New-PSDrive на non-Windows платформе (No 8291) (выражаем благодарность) @lukexjeremy!)
  • Добавлена cd + поддержка (No 7206) (выражаем благодарность) @bergmeister!)
  • Теперь Set-Location -LiteralPath работает с папками с именами "-" и "+" (№ 8089).
  • Test-Path возвращает значение , $false если задано пустое значение или $null значение пути (No 8080) (выражаем благодарность @vexx32!)
  • Разрешен возврат динамического параметра, даже если путь не соответствует ни одному поставщику (№ 7957).
  • Предоставлена поддержка командлетов Get-PSHostProcessInfo и Enter-PSHostProcess на платформах Unix (№ 8232).
  • Сокращение выделений в Get-Content командлете (No 8103) (выражаем благодарность) @iSazonov!)
  • Теперь командлет Add-Content предоставляет общий доступ на чтение другим инструментам во время записи содержимого (№ 8091).
  • Get/Add-Content вызывает улучшенную ошибку при нацеливание на контейнер (No 7823) (выражаем благодарность) @kvprasoon!)
  • Добавлены -Nameпараметры , -NoUserOverrides и -ListAvailable в Get-Culture командлет (No 7702) (выражаем благодарность). @iSazonov!)
  • Добавлен унифицированный атрибут для завершения для параметра Encoding (#7732) (Спасибо @ThreeFive-O!)
  • Разрешить числовые идентификаторы и имена зарегистрированных кодовых страниц в параметрах кодирования (No 7636) (выражаем благодарность) @iSazonov!)
  • Исправление Rename-Item -Path с помощью символа с подстановочными знаками (No 7398) (выражаем благодарность) @kwkam!)
  • При использовании Start-Transcript и файл существует, пустой файл вместо удаления (No 8131) (выражаем благодарность) @paalbra!)
  • Явное Add-Type открытый код файлов с помощью FileAccess.Read и FileShare.Read (No 7915) (выражаем благодарность)@IISResetMe!)
  • Исправлена команда Enter-PSSession -ContainerId для последней версии Windows (№ 7883).
  • Теперь командлет Test-ModuleManifest заполняет свойство NestedModules (№ 7859).
  • Добавление %F регистра в Get-Date -UFormat (No 7630) (выражаем благодарность) @britishben!)
  • Исправление Set-Service -Status Stopped для остановки служб с зависимостями (No 5525) (выражаем благодарность) @zhenggu!)