当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 中的实验性功能

作者:精品下载站 日期:2024-12-14 03:01:32 浏览:13 分类:玩电脑

使用 PowerShell 中的实验性功能


PowerShell 中的实验功能支持提供了一种实验功能与 PowerShell 或 PowerShell 模块中现有稳定功能共存的机制。

实验性功能是指设计尚未最终确定的功能。该功能可供用户测试并提供反馈。一旦实验性功能最终确定,设计变更就会成为重大变更。

警告

实验性功能不打算在生产中使用,因为更改可能会造成破坏。实验性功能不受官方支持。但是,我们感谢任何反馈和错误报告。您可以在 GitHub 源存储库中提交问题。

有关启用或禁用这些功能的更多信息,请参阅 about_Experimental_Features。

实验性功能生命周期

Get-ExperimentalFeature cmdlet 返回 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…
PSSubsystemPluginModel              True PSEngine A plugin model for registering and un-registering…

使用Enable-ExperimentalFeature 和Disable-ExperimentalFeature cmdlet 启用或禁用功能。您必须启动新的 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 版本:

[玩转系统] 使用 PowerShell 中的实验性功能

此图标表示删除了实验性功能的 PowerShell 版本:

[玩转系统] 使用 PowerShell 中的实验性功能

Name 7.2 7.3 7.4 7.5 (preview) PSCommandNotFoundSuggestion [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSDesiredStateConfiguration.InvokeDscResource [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSNativePSPathResolution [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSSubsystemPluginModel [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSNativeCommandArgumentPassing [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSAnsiRenderingFileInfo [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSLoadAssemblyFromNativeCode [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSNativeCommandErrorActionPreference [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSFeedbackProvider [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSModuleAutoLoadSkipOfflineFiles [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSCommandWithArgs [玩转系统] 使用 PowerShell 中的实验性功能 [玩转系统] 使用 PowerShell 中的实验性功能 PSNativeWindowsTildeExpansion [玩转系统] 使用 PowerShell 中的实验性功能

PSAnsi渲染文件信息

笔记

此功能在 PowerShell 7.3 中成为主流。

PowerShell 7.2 中添加了 ANSI 格式化功能。此功能添加 $PSStyle.FileInfo 成员并启用特定文件类型的着色。

  • $PSStyle.FileInfo.Directory - 用于指定目录颜色的内置成员
  • $PSStyle.FileInfo.SymbolicLink - 用于指定符号链接颜色的内置成员
  • $PSStyle.FileInfo.Executable - 用于指定可执行文件颜色的内置成员。
  • $PSStyle.FileInfo.Extension - 使用此成员定义不同文件扩展名的颜色。 扩展成员预先包含存档和 PowerShell 文件的扩展。

有关详细信息,请参阅 about_Automatic_Variables。

PS命令未找到建议

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.

带参数的 PS 命令

此功能为 pwsh 启用 -CommandWithArgs 参数。此参数允许您使用参数执行 PowerShell 命令。与 -Command 不同,此参数填充可由命令使用的 $args 内置变量。

第一个字符串是命令,后续由空格分隔的字符串是参数。

例如:

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

此示例产生以下输出:

arg: arg1
arg: arg2

此功能已在 PowerShell 7.4-preview.2 中添加。

PSDesiredStateConfiguration.InvokeDscResource

允许在非 Windows 系统上编译为 MOF,并允许在没有 LCM 的情况下使用 Invoke-DSCResource

从 PowerShell 7.2 开始,PSDesiredStateConfiguration 模块已被删除,并且默认情况下禁用此功能。要启用此功能,您必须从 PowerShell 库安装 PSDesiredStateConfiguration v2.0.5 模块并启用该功能。

DSC v3 没有此实验性功能。 DSC v3 仅支持 Invoke-DSCResource,不使用也不支持 MOF 编译。有关详细信息,请参阅 PowerShell 所需状态配置 v3。

PS反馈提供者

启用此功能后,PowerShell 将使用新的反馈提供程序在找不到命令时向您提供反馈。反馈提供程序是可扩展的,可以由第三方模块实现。其他子系统(例如预测器子系统)可以使用反馈提供程序来提供预测 IntelliSense 结果。

此功能包括两个内置反馈提供程序:

  • GeneralCommandErrorFeedback 提供与现有的建议功能相同的功能

  • UnixCommandNotFound,在 Linux 上可用,提供类似于 bash 的反馈。

    UnixCommandNotFound 既充当反馈提供者又充当预测器。 command-not-found 命令的建议既用于在交互式运行中找不到命令时提供反馈,又用于为下一个命令行提供预测性 IntelliSense 结果。

此功能已在 PowerShell 7.4-preview.3 中添加。

PSLoadAssemblyFromNativeCode

公开 API 以允许从本机代码加载程序集。

PSModuleAutoLoadSkipOfflineFiles

启用此功能后,如果用户的 PSModulePath 包含来自云提供商(例如 OneDrive)的文件夹,PowerShell 将不再触发下载该文件夹中包含的所有文件。任何标记为未下载的文件都会被跳过。使用云提供商在计算机之间同步其模块的用户应将模块文件夹标记为固定或 OneDrive 以外的提供商的同等状态。将模块文件夹标记为固定可确保文件始终保留在磁盘上。

此功能已在 PowerShell 7.4-preview.1 中添加。

PSNativeCommand参数传递

笔记

此功能在 PowerShell 7.3 中成为主流。

启用此实验性功能后,PowerShell 使用 StartProcessInfo 对象的 ArgumentList 属性,而不是我们当前在调用本机可执行文件时重建字符串的机制。

警告

新行为是对当前行为的重大改变。这可能会破坏调用本机应用程序时解决各种问题的脚本和自动化。从历史上看,引号必须被转义,并且不可能向本机应用程序提供空参数。使用停止解析标记 (--%) 或 Start-Process cmdlet 在需要时回避本机参数传递。

此功能添加了一个新的 $PSNativeCommandArgumentPassing 首选项变量来控制此行为。该变量允许您选择运行时的行为。有效值为 LegacyStandardWindows。默认行为是特定于平台的。在 Windows 平台上,默认设置为 Windows,非 Windows 平台默认为 Standard

Legacy 是历史行为。 WindowsStandard 模式的行为相同,只是在 Windows 模式下,以下文件的调用会自动使用 Legacy 风格参数传递。

    cmd.exe
    find.exe
    cscript.exe
    wscript.exe
  • sqlcmd.exe - PowerShell 7.3.1 中添加
  • .bat结尾
  • .cmd结尾
  • .js结尾
  • .vbs 结尾
  • .wsf 结尾
  • 如果 $PSNativeCommandArgumentPassing 设置为 LegacyStandard,则解析器不会检查这些文件。

    默认行为是特定于平台的。在 Windows 平台上,默认设置为 Windows,非 Windows 平台为 Standard

    笔记

    以下示例使用 TestExe.exe 工具。您可以从源代码构建TestExe。请参阅 PowerShell 源存储库中的 TestExe。

    此更改带来的新行为:

    • 带有嵌入引号的文字或可扩展字符串将保留引号:

      PS> $a = 'a" "b'
      PS> TestExe -echoargs $a 'c" "d' e" "f
      Arg 0 is <a" "b>
      Arg 1 is <c" "d>
      Arg 2 is <e f>
      
    • 保留空字符串作为参数:

      PS> TestExe -echoargs '' a b ''
      Arg 0 is <>
      Arg 1 is <a>
      Arg 2 is <b>
      Arg 3 is <>
      

    有关新行为的更多示例,请参阅 about_Parsing。

    PowerShell 7.3 还添加了跟踪本机命令参数绑定的功能。有关详细信息,请参阅跟踪命令。

    PSNativeCommandErrorActionPreference

    笔记

    此功能在 PowerShell 7.4 中成为主流。

    本机命令通常向调用应用程序返回退出代码,该退出代码为零表示成功,非零表示失败。但是,本机命令当前不参与 PowerShell 错误流。重定向的 stderr 输出的解释方式与 PowerShell 错误流不同。许多本机命令使用 stderr 作为信息或详细流,因此只有退出代码很重要。在脚本中使用本机命令的用户需要在每次调用后检查退出状态,类似于以下示例:

    if ($LASTEXITCODE -ne 0) {
        throw "Command failed. See above errors for details"
    }
    

    但是,此示例并不支持 $? 因 cmdlet 或函数错误而可能为 false 的所有情况,从而导致 $LASTEXITCODE 过时。

    此功能实现了 $PSNativeCommandUseErrorActionPreference 首选项变量,该变量控制 PowerShell 中处理本机命令错误的方式。这允许本机命令失败生成错误对象,这些对象会添加到 PowerShell 错误流中,并且可能会终止脚本的执行,而无需额外处理。

    $PSNativeCommandUseErrorActionPreference 默认设置为 $false。将首选项设置为 $true 后,您将获得以下行为:

    • $ErrorActionPreference='Stop' 时,脚本将在本机命令返回非零退出代码时中断。
    • $ErrorActionPreference='Continue'(默认值)时,您将看到本机命令错误的 PowerShell 错误消息,但脚本不会中断。

    PSNativePSPathResolution

    笔记

    此实验性功能已在 PowerShell 7.3 中删除,不再受支持。

    如果使用文件系统提供程序的 PSDrive 路径传递给本机命令,则解析的文件路径将传递给本机命令。这意味着像 code temp:/test.txt 这样的命令现在可以按预期工作。

    此外,在 Windows 上,如果路径以 ~ 开头,则会解析为完整路径并传递给本机命令。在这两种情况下,路径都会标准化为相关操作系统的目录分隔符。

    • 如果路径不是 PSDrive 或 ~(在 Windows 上),则不会发生路径规范化
    • 如果路径用单引号引起来,那么它不会被解析并被视为文字

    PS子系统插件模型

    此功能在 PowerShell 中启用子系统插件模型。该功能使得可以将 System.Management.Automation.dll 的组件分离到驻留在其自己的程序集中的各个子系统中。这种分离减少了核心 PowerShell 引擎的磁盘占用空间,并允许这些组件成为最小化 PowerShell 安装的可选功能。

    目前,仅支持 CommandPredictor 子系统。该子系统与 PSReadLine 模块一起使用来提供自定义预测插件。将来,JobCommandCompleterRemoting 和其他组件可能会被分成 System.Management.Automation.dll 之外的子系统程序集

    该实验性功能包括一个新的 cmdlet Get-PSSubsystem。仅当启用该功能时,此 cmdlet 才可用。此 cmdlet 返回有关系统上可用的子系统的信息。

    PSNativeWindows波浪号扩展

    启用此功能后,PowerShell 在调用本机命令之前会将不带引号的波形符 (~) 展开到用户当前的主文件夹。以下示例展示了该功能的工作原理。

    禁用该功能后,波形符将作为文字字符串传递给本机命令。

    PS> cmd.exe /c echo ~
    ~
    

    启用该功能后,PowerShell 会在将波形符传递给本机命令之前扩展波形符。

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

    此功能仅适用于 Windows。在非 Windows 平台上,波形符扩展是本机处理的。

    此功能已在 PowerShell 7.5-preview.2 中添加。

    您需要 登录账户 后才能发表评论

    取消回复欢迎 发表评论:

    关灯