Поделиться через


Использование экспериментальных функций в PowerShell

Поддержка экспериментальных функций в PowerShell обеспечивает механизм для сосуществования экспериментальных функций с имеющимися стабильными функциями в модулях PowerShell или PowerShell.

Экспериментальная функция — это функция, в которой проект не завершен. Эта функция доступна пользователям для тестирования и предоставления отзывов о ней. Как только процесс разработки экспериментальной функции будет завершен, изменения на этапе проектирования станут критическими.

Внимание

Экспериментальные функции не предназначены для использования в рабочей среде, так как изменения могут привести к нарушению работы. Экспериментальные функции официально не поддерживаются. Тем не менее мы будем признательны вам за любые отзывы и отчеты об ошибках. Сообщить о проблеме можно в исходном репозитории GitHub.

Дополнительные сведения о включении или отключении этих функций см. в статье Экспериментальные функции.

Жизненный цикл экспериментальных функций

Командлет Get-ExperimentalFeature возвращает все экспериментальные функции, доступные PowerShell. Экспериментальные функции могут поступать из модулей или подсистемы PowerShell. Экспериментальные функции на основе модулей доступны только после импорта модуля. В следующем примере psDesiredStateConfiguration не загружается, поэтому PSDesiredStateConfiguration.InvokeDscResource эта функция недоступна.

Get-ExperimentalFeature
Name                             Enabled Source   Description
----                             ------- ------   -----------
PSCommandNotFoundSuggestion        False PSEngine Recommend potential commands based on fuzzy searc…
PSCommandWithArgs                  False PSEngine Enable `-CommandWithArgs` parameter for pwsh
PSFeedbackProvider                  True PSEngine Replace the hard-coded suggestion framework with …
PSLoadAssemblyFromNativeCode       False PSEngine Expose an API to allow assembly loading from nati…
PSModuleAutoLoadSkipOfflineFiles    True PSEngine Module discovery will skip over files that are ma…
PSSerializeJSONLongEnumAsNumber     True PSEngine Serialize enums based on long or ulong as an nume…
PSSubsystemPluginModel              True PSEngine A plugin model for registering and un-registering…

Используйте командлеты Enable-ExperimentalFeature и Disable-ExperimentalFeature, чтобы включить или отключить функцию. Чтобы это изменение вступило в действие, вам нужно будет запустить новый сеанс PowerShell. Выполните следующую команду, чтобы включить эту функцию PSCommandNotFoundSuggestion :

Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.

Когда экспериментальная функция становится основной, она больше не доступна в качестве экспериментальной функции, так как функциональность теперь является частью подсистемы PowerShell или модуля. Например, эта функция стала основной PSAnsiRenderingFileInfo в PowerShell 7.3. Вы автоматически получаете функциональные возможности функции функции.

Примечание.

Некоторые функции имеют требования к конфигурации, такие как переменные предпочтения, которые должны быть заданы, чтобы получить нужные результаты от функции.

Если экспериментальная функция прекращена, эта функция больше не доступна в PowerShell. Например, функция была прекращена PSNativePSPathResolution в PowerShell 7.3.

Доступные функции

В этой статье описываются доступные экспериментальные функции и сведения об их использовании.

Условные обозначения

  • Значок Экспериментальный указывает, что экспериментальная функция доступна в версии PowerShell
  • Значок Основной указывает версию PowerShell, в которой экспериментальная функция стала основной
  • Значок Выведено из использования указывает версию PowerShell, в которой была удалена экспериментальная функция.
Имя. 7,4 7.5 7.6 (предварительная версия)
PSCommandNotFoundSuggestion Экспериментальный Основной Основной
PSDesiredStateConfiguration.InvokeDscResource Экспериментальный Экспериментальный Экспериментальный
PSSubsystemPluginModel Экспериментальный Экспериментальный Экспериментальный
PSLoadAssemblyFromNativeCode Экспериментальный Экспериментальный Экспериментальный
PSFeedbackProvider Экспериментальный Экспериментальный Экспериментальный
PSModuleAutoLoadSkipOfflineFiles Экспериментальный Основной Основной
PSCommandWithArgs Экспериментальный Основной Основной
PSNativeWindowsTildeExpansion Экспериментальный Экспериментальный
PSRedirectToVariable Экспериментальный Экспериментальный
PSSerializeJSONLongEnumAsNumber Экспериментальный Экспериментальный

PSCommandNotFoundSuggestion

Примечание.

Эта функция стала основной в PowerShell 7.5-preview.5.

Рекомендует потенциальные команды на основе поиска нечетких соответствий после CommandNotFoundException.

PS> get
get: The term 'get' isn't 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.

Suggestion [4,General]: The most similar commands are: set, del, ft, gal, gbp, gc, gci,
gcm, gdr, gcs.

PSCommandWithArgs

Примечание.

Эта функция стала основной в PowerShell 7.5-preview.5.

Эта функция включает -CommandWithArgs параметр для pwsh. Этот параметр позволяет выполнять команду PowerShell с аргументами. В отличие от -Commandэтого параметра, эта переменная заполняет $args встроенную переменную, которую можно использовать командой.

Первая строка — это команда, а последующие строки, разделенные пробелами, — это аргументы.

Например:

pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2

В примере получается следующий вывод.

arg: arg1
arg: arg2

Эта функция добавлена в PowerShell 7.4-preview.2.

PSDesiredStateConfiguration.InvokeDscResource

Эта функция включает компиляцию в MOF в системах, отличных от Windows, и позволяет использовать Invoke-DSCResource без LCM.

Начиная с PowerShell 7.2 модуль PSDesiredStateConfiguration был удален, и эта функция отключена по умолчанию. Чтобы включить эту функцию, необходимо установить модуль PSDesiredStateConfiguration версии 2.0.5 из коллекция PowerShell и включить эту функцию.

DSC версии 3 не имеет этой экспериментальной функции. DSC версии 3 поддерживает Invoke-DSCResource только и не поддерживает компиляцию MOF. Дополнительные сведения см. в разделе PowerShell Desired State Configuration версии 3.

PSFeedbackProvider

При включении этой функции PowerShell использует новый поставщик отзывов, чтобы дать отзыв, когда не удается найти команду. Поставщик отзывов является расширяемым и может быть реализован сторонними модулями. Поставщик отзывов может использоваться другими подсистемами, такими как подсистема прогнозирования, для предоставления прогнозных результатов IntelliSense.

Эта функция включает два встроенных поставщика отзывов:

  • GeneralCommandErrorFeedback обслуживает те же функции предложений, которые существуют сегодня

  • UnixCommandNotFound, доступный в Linux, предоставляет отзывы, аналогичные bash.

    UnixCommandNotFound служит как поставщиком отзывов, так и прогнозатором. Предложение команды, не найденной командой, используется как для предоставления обратной связи, если команда не удается найти в интерактивном запуске, так и для предоставления прогнозных результатов IntelliSense для следующей командной строки.

Эта функция добавлена в PowerShell 7.4-preview.3.

PSLoadAssemblyFromNativeCode

Предоставляет API, позволяющий загружать сборки из машинного кода.

PSModuleAutoLoadSkipOfflineFiles

Примечание.

Эта функция стала основной в PowerShell 7.5-preview.5.

Если эта функция включена, если PSModulePath пользователя содержит папку из поставщика облачных служб, например OneDrive, PowerShell больше не активирует скачивание всех файлов, содержащихся в этой папке. Все файлы, помеченные как не скачанные, пропускаются. Пользователи, использующие поставщики облачных служб для синхронизации модулей между компьютерами, должны пометить папку модуля как закрепленную или эквивалентную для поставщиков, отличных от OneDrive. Пометка папки модуля как закрепленная гарантирует, что файлы всегда хранятся на диске.

Эта функция была добавлена в PowerShell 7.4-preview.1.

PSRedirectToVariable

Примечание.

Эта экспериментальная функция была добавлена в PowerShell 7.5-preview.4.

При включении эта функция добавляет поддержку перенаправления на диск переменной. Эта функция позволяет перенаправить данные в переменную с помощью синтаксиса variable:name . PowerShell проверяет целевой объект перенаправления и если он использует поставщик переменных, который он вызывает Set-Variable , а не Out-File.

В следующем примере показано, как перенаправить выходные данные команды в переменную:

. {
    "Output 1"
    Write-Warning "Warning, Warning!"
    "Output 2"
} 3> variable:warnings
$warnings
Output 1
Output 2
WARNING: Warning, Warning!

PSSubsystemPluginModel

Эта функция включает модель подключаемого модуля подсистемы в PowerShell. Эта функция позволяет разделять компоненты System.Management.Automation.dll в отдельные подсистемы, находящиеся в их собственной сборке. Такое разделение сокращает объем дискового пространства ядра PowerShell и позволяет этим компонентам стать необязательными для минимальной установки PowerShell.

В настоящее время поддерживается только подсистема CommandPredictor. Эта подсистема используется вместе с модулем PSReadLine для предоставления настраиваемых подключаемых модулей прогнозирования. В будущем задание, CommandCompleter, удаленное взаимодействие и другие компоненты можно будет разделить на сборки подсистемы за пределами System.Management.Automation.dll.

Экспериментальная функция содержит новый командлет Get-PSSubsystem. Этот командлет доступен, только если функция включена. Этот командлет возвращает сведения о подсистемах, доступных в системе.

PSNativeWindowsTildeExpansion

Если эта функция включена, PowerShell развертывает неquoted tilde (~) в текущую домашнюю папку пользователя перед вызовом собственных команд. В следующих примерах показано, как работает функция.

Если функция отключена, тильда передается в собственную команду в виде литеральной строки.

PS> cmd.exe /c echo ~
~

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

PS> cmd.exe /c echo ~
C:\Users\username

Эта функция применяется только к Windows. На платформах, отличных от Windows, расширение тильды обрабатывается изначально.

Эта функция добавлена в PowerShell 7.5-preview.2.

PSSerializeJSONLongEnumAsNumber

Эта функция позволяет командлету ConvertTo-Json сериализовать все значения перечисления на Int64/long основе числового значения или UInt64/ulong в виде строкового представления этого значения перечисления. Это соответствует поведению сериализации перечисления с другими базовыми типами перечисления, в которых командлет сериализует перечисления в качестве числового значения. Используйте параметр EnumsAsStrings для сериализации в виде строкового представления.

Например:

# PSSerializeJSONLongEnumAsNumber disabled
@{
    Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": "Cmdlets" }

# PSSerializeJSONLongEnumAsNumber enabled
@{
    Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": 32 }

# -EnumsAsStrings to revert back to the old behaviour
@{
    Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json -EnumsAsStrings
# { "Key": "Cmdlets" }