about_Profiles

简短说明

介绍如何创建和使用 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 中,文件夹的位置 Documents 可以通过文件夹重定向或 OneDrive 更改。 不建议将 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 存储当前用户的主目录

注意

在 Windows 中,文件夹的位置 Documents 可以通过文件夹重定向或 OneDrive 更改。 不建议将 Documents 文件夹重定向到网络共享或将其包含在 OneDrive 中。 重定向文件夹可能会导致模块无法加载并在配置文件脚本中创建错误。 有关从 OneDrive 管理中删除 Documents 文件夹的信息,请参阅 OneDrive 文档

$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,请使用 的 NoProfile 参数 pwsh.exe,该程序用于启动 PowerShell。

若要开始,请打开可启动 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可用。

另请参阅