Новые возможности в 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-Object
PSObject и 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!)