PowerShell 快捷配置指南
PowerShell 提供多种快捷配置机制,功能更强大。
本文总结 3 种核心方式 + 实战迁移示例。
一、概述
PowerShell 提供 3 种对应方案:
| 方式 | 用途 | 对应 CMD 概念 |
|---|---|---|
| Profile 文件 | 启动时自动执行的脚本 | 等价于 cmd_auto.bat |
| 快捷方式参数 | 启动时执行命令 / 脚本 | 类似 cmd /K xxx.bat |
| ExecutionPolicy | 控制脚本执行权限 | CMD 无对应概念 |
二、方式一:Profile 文件(推荐)
2.1 Profile 路径
PowerShell 启动时自动加载 Profile 脚本,路径存于内置变量 $PROFILE。
# 查看路径
$PROFILE
# 输出示例: C:\Users\xxx\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
# 检查是否存在
Test-Path $PROFILE
# 创建并编辑
notepad $PROFILE
2.2 Profile 作用域
PowerShell 共有 4 种 Profile,加载优先级由低到高:
| 变量 | 作用域 |
|---|---|
$PROFILE.AllUsersAllHosts |
所有用户、所有 Host |
$PROFILE.AllUsersCurrentHost |
所有用户、当前 Host |
$PROFILE.CurrentUserAllHosts |
当前用户、所有 Host |
$PROFILE(等同 CurrentUserCurrentHost) |
当前用户、当前 Host(最常用) |
2.3 配置内容示例
# ===== 别名 =====
function ll { dir -Name $args }
function grep { Select-String $args }
# ===== 自定义函数 =====
function mvnci { mvn clean install '-Dmaven.test.skip=true' $args }
function mvncp { mvn clean package -Dmaven.test.skip=true $args }
# ===== 启动命令 =====
cd C:\Workspace
Write-Host 'PowerShell Profile Loaded!' -ForegroundColor Green
# ===== 加载外部脚本 =====
. C:\Scripts\MyFunctions.ps1
三、方式二:快捷方式参数
修改 PowerShell 快捷方式的「目标」字段,启动时执行指定脚本:
powershell.exe -NoExit -Command "& 'C:\GreenSoftware\cmd_auto.bat'; cd C:\WorkPath"
| 参数 | 说明 |
|---|---|
-NoExit |
执行完命令后保持窗口打开 |
-Command |
指定要执行的命令字符串 |
-File |
指定要执行的 .ps1 脚本文件 |
-NoProfile |
启动时跳过 Profile 加载 |
四、方式三:ExecutionPolicy 配置
默认策略 Restricted 禁止执行任何脚本,需放开权限才能加载 Profile / 外部脚本。
# 查看当前策略
Get-ExecutionPolicy
# 设置(推荐:本地脚本可执行,远程脚本需签名)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
| 策略 | 说明 |
|---|---|
Restricted |
禁止执行所有脚本(默认) |
RemoteSigned |
本地脚本可执行,远程脚本需签名(推荐) |
Unrestricted |
所有脚本均可执行(不安全) |
Bypass |
无任何限制(仅临时使用) |
五、实战:迁移 cmd_auto.bat
5.1 原 cmd_auto.bat
@echo off
doskey ls=dir /b $*
doskey alias=doskey /macros
doskey history=doskey /history
doskey mvnci=mvn clean install '-Dmaven.test.skip=true'
doskey mvncp=mvn clean package -Dmaven.test.skip=true
5.2 迁移后 PowerShell Profile
# ===== 从 cmd_auto.bat 迁移的别名配置 =====
# ls -> 类 Unix 文件列表
function ls { dir -Name $args }
# alias -> 查看所有别名
function alias { Get-Alias }
# history -> 查看命令历史
function history { Get-History }
# mvnci -> Maven clean install (跳过测试)
function mvnci { mvn clean install '-Dmaven.test.skip=true' $args }
# mvncp -> Maven clean package (跳过测试)
function mvncp { mvn clean package -Dmaven.test.skip=true $args }
5.3 关键差异对比
| 特性 | CMD (doskey) | PowerShell (function) |
|---|---|---|
| 定义关键字 | doskey |
function |
| 参数占位符 | $* / $1 |
$args / param() |
| 支持复杂逻辑 | ❌ | ✅(完整脚本语言) |
| 支持管道传值 | ❌ | ✅ |
| 持久化方式 | 在 bat 中定义 | 写入 Profile 文件 |
六、验证与调试
- 保存 Profile 后,打开新的 PowerShell 窗口
- 输入自定义命令(如
mvnci)测试是否生效 - 如不生效,运行
. $PROFILE手动重载 - 查询所有自定义函数:
Get-ChildItem function: | Where-Object Source -eq ''
⚠️ 常见坑
- 编辑 Profile 时保存为 UTF-8 无 BOM,否则中文乱码
- PowerShell 5.1 和 PowerShell 7 的 Profile 路径不同:
- 5.1:
Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1- 7.x:
Documents\PowerShell\Microsoft.PowerShell_profile.ps1- Profile 内的语法错误会导致每次启动都报错,可用
powershell -NoProfile临时跳过加载排查
相关文章