Использование экспериментальных функций в 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, в которой была удалена экспериментальная функция.
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" }
PowerShell