相关文章推荐
愤怒的佛珠  ·  spring boot ...·  1 年前    · 
小胡子的松鼠  ·  C/C++ 中 static ...·  1 年前    · 

介绍如何创建和使用 PowerShell 配置文件。

可以创建 PowerShell 配置文件来自定义环境,并将特定于会话的元素添加到启动的每个 PowerShell 会话。

PowerShell 配置文件是在 PowerShell 启动时运行的脚本。 可以使用配置文件作为启动脚本来自定义环境。 可以添加命令、别名、函数、变量、模块、PowerShell 驱动器等。 还可以将其他特定于会话的元素添加到配置文件中,以便在每个会话中都可用,而无需导入或重新创建。

PowerShell 支持多个用户和主机程序的配置文件。 但是,不会为你创建配置文件。

配置文件类型和位置

PowerShell 支持多个范围限定为用户和 PowerShell 主机的配置文件。 你可以在计算机上使用任意或全部这些配置文件。

PowerShell 控制台支持以下基本配置文件。 这些文件路径是默认位置。

  • 所有用户,所有主机
    • Windows - $PSHOME\Profile.ps1
    • Linux - /opt/microsoft/powershell/7/profile.ps1
    • macOS - /usr/local/microsoft/powershell/7/profile.ps1
    • 所有用户,当前主机
      • Windows - $PSHOME\Microsoft.PowerShell_profile.ps1
      • Linux - /opt/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
      • macOS - /usr/local/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
      • 当前用户,所有主机
        • Windows - $HOME\Documents\PowerShell\Profile.ps1
        • Linux - ~/.config/powershell/profile.ps1
        • macOS - ~/.config/powershell/profile.ps1
        • 当前用户,当前主机
          • Windows - $HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
          • Linux - ~/.config/powershell/Microsoft.PowerShell_profile.ps1
          • macOS - ~/.config/powershell/Microsoft.PowerShell_profile.ps1
          • 在 Windows 中,文件夹重定向或 OneDrive 可以更改文件夹的位置 Documents 。 不建议将 Documents 文件夹重定向到网络共享,也不建议将其包含在 OneDrive 中。 重定向文件夹可能会导致模块无法加载,并会在配置文件脚本中产生错误。 有关从 OneDrive 管理中删除 Documents 文件夹的信息,请参阅 OneDrive 文档

            配置文件脚本按列出的顺序执行。 这意味着任何其他配置文件脚本都可以替代 AllUsersAllHosts 配置文件所做的更改。 CurrentUserCurrentHost 配置文件始终最后运行。 在 PowerShell 帮助中,通常会将“CurrentUserCurrentHost”配置文件称为“你的 PowerShell 配置文件”。

            托管 PowerShell 的其他程序可以支持自己的配置文件。 例如,Visual Studio Code (VS Code) 支持以下特定于主机的配置文件。

          • 所有用户,当前主机 - $PSHOME\Microsoft.VSCode_profile.ps1
          • 当前用户,当前主机 - $HOME\Documents\PowerShell\Microsoft.VSCode_profile.ps1
          • 配置文件路径包括以下变量:

          • $PSHOME 变量存储 PowerShell 的安装目录
          • $HOME 变量存储当前用户的主目录
          • $PROFILE 变量

            $PROFILE 自动变量存储当前会话中可用的 PowerShell 配置文件的路径。

            若要查看配置文件路径,请显示 $PROFILE 变量的值。 还可以在命令中使用 $PROFILE 变量来表示路径。

            $PROFILE 变量存储“当前用户,当前主机”配置文件的路径。 其他配置文件保存在 $PROFILE 变量的注释属性中。

            例如, $PROFILE 变量在 Windows PowerShell 控制台中具有以下值。

          • 当前用户,当前主机 - $PROFILE
          • 当前用户,当前主机 - $PROFILE.CurrentUserCurrentHost
          • 当前用户,所有主机 - $PROFILE.CurrentUserAllHosts
          • 所有用户,当前主机 - $PROFILE.AllUsersCurrentHost
          • 所有用户,所有主机 - $PROFILE.AllUsersAllHosts
          • 由于每个用户和每个主机应用程序中 $PROFILE 变量的值发生更改,因此请确保在所使用的每个 PowerShell 主机应用程序中显示配置文件变量的值。

            若要查看 $PROFILE 变量的当前值,请键入:

            $PROFILE | Select-Object *
            

            可以在许多命令中使用 $PROFILE 命令。 例如,以下命令在记事本中打开“当前用户,当前主机”配置文件:

            notepad $PROFILE
            

            以下命令确定是否在本地计算机上创建了“所有用户,所有主机”配置文件:

            Test-Path -Path $PROFILE.AllUsersAllHosts
            

            如何创建配置文件

            若要创建 PowerShell 配置文件,请使用以下命令格式:

            if (!(Test-Path -Path <profile-name>)) {
              New-Item -ItemType File -Path <profile-name> -Force
            

            例如,若要在当前 PowerShell 主机应用程序中为当前用户创建配置文件,请使用以下命令:

            if (!(Test-Path -Path $PROFILE)) {
              New-Item -ItemType File -Path $PROFILE -Force
            

            在此命令中,if 语句阻止覆盖现有配置文件。 将 $PROFILE 变量的值替换为要创建的配置文件的路径。

            若要在 Windows Vista 以及更高版本的 Windows 上创建“所有用户”配置文件,则必须使用“以管理员身份运行”选项启动 PowerShell。

            如何编辑配置文件

            可以在文本编辑器(如记事本)中打开任何 PowerShell 配置文件。

            若要在记事本的当前 PowerShell 主机应用程序中打开当前用户的配置文件,请键入:

            notepad $PROFILE
            

            若要打开其他配置文件,请指定配置文件名称。 例如,若要打开所有主机应用程序的所有用户的配置文件,请键入:

            notepad $PROFILE.AllUsersAllHosts
            

            若要应用更改,请保存配置文件,然后重启 PowerShell。

            如何选择配置文件

            如果使用多个主机应用程序,请将所有主机应用程序中使用的项放入 $PROFILE.CurrentUserAllHosts 配置文件中。 将特定于主机应用程序的项(如设置主机应用程序的背景色的命令)放在特定于该主机应用程序的配置文件中。

            如果你是为许多用户自定义 PowerShell 的管理员,请遵循以下准则:

          • 将常用项存储在 $PROFILE.AllUsersAllHosts 配置文件中
          • 将特定于主机应用程序的项存储在特定于主机应用程序的 $PROFILE.AllUsersCurrentHost 配置文件中
          • 在用户特定的配置文件中存储特定用户的项
          • 请务必检查主机应用程序文档,了解 PowerShell 配置文件的任何特殊实现。

            如何使用配置文件

            在 PowerShell 中创建的许多项和运行的大部分命令仅影响当前会话。 结束会话时,会删除这些项。

            特定于会话的命令和项包括 PowerShell 变量、环境变量、别名、函数、命令和添加到会话的 PowerShell 模块。

            若要保存这些项并使其在所有将来的会话中可用,请将它们添加到 PowerShell 配置文件。

            配置文件的另一个常见用途是保存常用函数、别名和变量。 将项保存在配置文件中时,可以在任何适用的会话中使用它们,而无需重新创建。

            如何启动配置文件

            打开配置文件时,该文件为空。 但是,可以使用经常使用的变量、别名和命令填充它。

            下面是一些使用入门建议。

            添加列出任何 cmdlet 别名的函数

            function Get-CmdletAlias ($cmdletname) {
              Get-Alias |
                Where-Object -FilterScript {$_.Definition -like "$cmdletname"} |
                  Format-Table -Property Definition, Name -AutoSize
            

            自定义你的控制台

            function CustomizeConsole {
              $hosttime = (Get-ChildItem -Path $PSHOME\pwsh.exe).CreationTime
              $hostversion="$($Host.Version.Major)`.$($Host.Version.Minor)"
              $Host.UI.RawUI.WindowTitle = "PowerShell $hostversion ($hosttime)"
              Clear-Host
            CustomizeConsole
            

            添加自定义的 PowerShell 提示

            function Prompt {
                $env:COMPUTERNAME + "\" + (Get-Location) + "> "
            

            有关 PowerShell 提示的详细信息,请参阅 about_Prompts

            有关其他配置文件示例,请参阅自定义 shell 环境

            NoProfile 参数

            若要在没有配置文件的情况下启动 PowerShell,请使用 pwsh.exe(该程序会启动 PowerShell)的“NoProfile”参数。

            若要开始,请打开可启动 PowerShell 的程序,例如 Cmd.exe 或 PowerShell 本身。 还可以在 Windows 中使用“运行”对话框。

            pwsh -NoProfile
            

            有关 pwsh.exe 参数的完整列表,请键入:

            pwsh -?
            

            配置文件和执行策略

            PowerShell 执行策略部分确定你是否可以运行脚本并加载配置文件,包括配置文件。 默认执行策略为“受限”。 它阻止所有脚本运行,包括配置文件。 如果使用“受限”策略,则配置文件不会运行,并且不会应用其内容。

            Set-ExecutionPolicy 命令设置并更改执行策略。 它是所有 PowerShell 会话中应用的几个命令之一,因为该值保存在注册表中。 打开控制台时无需设置它,也不必在配置文件中存储 Set-ExecutionPolicy 命令。

            配置文件和远程会话

            PowerShell 配置文件不会在远程会话中自动运行,因此配置文件添加的命令不在远程会话中。 此外,$PROFILE 自动变量不会在远程会话中填充。

            若要在会话中运行配置文件,请使用 Invoke-Command cmdlet。

            例如,以下命令运行 $s 中的会话中的本地计算机中的“当前用户,当前主机”配置文件。

            Invoke-Command -Session $s -FilePath $PROFILE
            

            以下命令运行 $s 中的会话中的远程计算机中的“当前用户,当前主机”配置文件。 由于未填充 $PROFILE 变量,因此该命令使用配置文件的显式路径。 我们使用点溯源运算符,以便配置文件在远程计算机上的当前范围内执行,而不是在其自己的范围内执行。

            Invoke-Command -Session $s -ScriptBlock {
              . "$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
            

            运行此命令后,配置文件添加到会话的命令可在 $s 中使用。

          • about_Automatic_Variables
          • about_Execution_Policies
          • about_Functions
          • about_Prompts
          • about_Remote
          • about_Scopes
          • about_Signing
          • Set-ExecutionPolicy
          • 即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:https://aka.ms/ContentUserFeedback

            提交和查看相关反馈

  •