about_Profiles

简短说明

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

长说明

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

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

PowerShell 支持用户和主机程序的多个配置文件。 但是,它不会为你创建配置文件。 本主题介绍配置文件,并介绍如何在计算机上创建和维护配置文件。

它介绍了如何使用 PowerShell 控制台的 NoProfile 参数 (PowerShell.exe) 在没有任何配置文件的情况下启动 PowerShell。 并介绍了 PowerShell 执行策略对配置文件的影响。

配置文件

PowerShell 支持多个配置文件。 此外,PowerShell 主机程序可以支持自己的特定于主机的配置文件。

例如,PowerShell 控制台支持以下基本配置文件。 配置文件按优先顺序列出。 第一个配置文件具有最高优先级。

说明 路径
所有用户、所有主机 Windows - $PSHOME\Profile.ps1
Linux - /usr/local/microsoft/powershell/7/profile.ps1
macOS - /usr/local/microsoft/powershell/7/profile.ps1
所有用户,当前主机 Windows - $PSHOME\Microsoft.PowerShell_profile.ps1
Linux - /usr/local/microsoft/powershell/7/Microsoft.Powershell_profile.ps1
macOS - /usr/local/microsoft/powershell/7/Microsoft.Powershell_profile.ps1
当前用户、所有主机 Windows - $Home\[My ]Documents\PowerShell\Profile.ps1
Linux - ~/.config/powershell/profile.ps1
macOS - ~/.config/powershell/profile.ps1
当前用户、当前主机 Windows - $Home\[My ]Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Linux - ~/.config/powershell/Microsoft.Powershell_profile.ps1
macOS - ~/.config/powershell/Microsoft.Powershell_profile.ps1

配置文件路径包括以下变量:

  • 变量 $PSHOME ,用于存储 PowerShell 的安装目录
  • 变量 $Home ,用于存储当前用户的主目录

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

说明 路径
所有用户、当前主机 $PSHOME\Microsoft.VSCode_profile.ps1
当前用户、当前主机 $Home\[My ]Documents\PowerShell\
Microsoft.VSCode_profile.ps1

在 PowerShell 帮助中,“CurrentUser,Current Host”配置文件是最常称为“PowerShell 配置文件”的配置文件。

注意

在 Windows 中,“文档”文件夹的位置可以通过文件夹重定向或 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 | Get-Member -Type NoteProperty

可以在许多命令中使用 $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-path> 占位符的值<替换为要创建的配置文件的路径。

注意

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

如何编辑配置文件

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

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

notepad $PROFILE

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

notepad $PROFILE.AllUsersAllHosts

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

如何选择配置文件

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

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

  • 将常用项存储在配置文件中$PROFILE.AllUsersAllHosts
  • 将特定于主机应用程序的项存储在特定于主机应用程序的配置文件中$PROFILE.AllUsersCurrentHost
  • 将特定用户的项存储在用户特定的配置文件中

请务必检查主机应用程序文档,以获取 PowerShell 配置文件的任何特殊实现。

如何使用配置文件

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

特定于会话的命令和项包括变量、首选项变量、别名、函数、命令 (( Set-ExecutionPolicy) 除外)以及添加到会话的 PowerShell 模块。

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

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

如何启动配置文件

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

下面是一些入门建议。

添加用于轻松打开配置文件的命令

如果使用“当前用户,当前主机”配置文件以外的配置文件,这尤其有用。 例如,添加以下命令:

function Pro {notepad $PROFILE.CurrentUserAllHosts}

添加一个函数,用于列出任何 cmdlet 的别名

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

自定义主机

function Color-Console {
  $Host.ui.rawui.backgroundcolor = "white"
  $Host.ui.rawui.foregroundcolor = "black"
  $hosttime = (Get-ChildItem -Path $PSHOME\PowerShell.exe).CreationTime
  $hostversion="$($Host.Version.Major)`.$($Host.Version.Minor)"
  $Host.UI.RawUI.WindowTitle = "PowerShell $hostversion ($hosttime)"
  Clear-Host
}
Color-Console

添加自定义 PowerShell 提示符

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

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

NoProfile 参数

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

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

键入:

PowerShell -NoProfile

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

PowerShell -?

配置文件和执行策略

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可用。

另请参阅