简短说明
介绍如何创建和使用 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 -
- 所有用户,当前主机
- 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 -
- 当前用户、所有主机
- Windows -
$HOME\Documents\PowerShell\Profile.ps1
- Linux -
~/.config/powershell/profile.ps1
- macOS -
~/.config/powershell/profile.ps1
- Windows -
- 当前用户,当前主机
- Windows -
$HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
- Linux -
~/.config/powershell/Microsoft.PowerShell_profile.ps1
- macOS -
~/.config/powershell/Microsoft.PowerShell_profile.ps1
- Windows -
配置文件脚本按列出的顺序执行。 这意味着,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 中,可以通过文件夹重定向或 OneDrive 更改 Documents
文件夹的位置。 建议不要将 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,请使用 的 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
中使用。