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 中,文件夹重定向或 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 中使用。

另请参阅