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 文件

六、验证与调试

  1. 保存 Profile 后,打开新的 PowerShell 窗口
  2. 输入自定义命令(如 mvnci)测试是否生效
  3. 如不生效,运行 . $PROFILE 手动重载
  4. 查询所有自定义函数:
    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 临时跳过加载排查