介绍
.ps1 是 PowerShell 脚本文件的扩展名,本质是 纯文本文件,里面编写一条或多条 PowerShell 命令,可被 PowerShell 执行引擎(powershell.exe 或 pwsh)解释运行。
全称:PowerShell Script File
平台:原生 Windows,PowerShell 7+ 跨 Linux/macOS
MIME:
text/x\-powershell/application/x\-powershell同类后缀:
- **\.psm1**:模块文件(可被导入、复用函数)
- **\.psd1**:模块清单/数据文件
- **\.ps1xml**:配置/格式文件
为什么后缀叫 .ps1
- ps = PowerShell
- 1 = 版本 1
最早 PowerShell 刚出世时 版本号是 1.0
微软直接约定:
脚本后缀 = **ps + 主版本号**
所以就叫 .ps1
后续版本对应后缀
按这个逻辑顺延:
- PowerShell 1.0 →
.ps1 - PowerShell 2.0 →
.ps2(极少用) - PowerShell 3.0+ 往后,不再出新后缀,统一还用
.ps1
为什么不叫 .ps / .powershell / .script?
.ps早已被 PostScript 打印文件占用,不能抢后缀- 太长后缀不好记、老旧系统兼容差
- 微软传统习惯:用缩写+版本号做后缀
类似:.vbsVB脚本.bat批处理.cmdNT命令脚本
配套全套后缀来历
都是同一套命名规则:
.ps1PowerShell 脚本文件(主脚本).psm1PowerShell Module 模块文件.psd1Module Manifest 模块清单.ps1xml配置/格式定义文件
前面 ps 固定,后面字母是用途缩写。
PS1 文件特点
1、纯文本、无编译
用记事本、VS Code、PowerShell ISE 直接编辑,无需编译,修改即可运行。
2、面向对象(区别于 .bat/.cmd)
传递的是 .NET 对象,不是纯文本;管道 \| 直接传对象属性,文本处理、系统操作更简单高效。
3、默认禁止执行(安全机制)
双击不直接运行,防止恶意脚本自动执行,必须通过执行策略(Execution Policy)手动放行。
PS1 编码格式(坑)
很多新手误区:误认为PS1必须用GBK编码,不能用UTF-8,该说法错误,以下是通俗易懂的官方编码规则,专治中文乱码。
1、不同版本PowerShell编码硬性规则
(1)Windows 自带老版本:PowerShell 5.1(最常用)
UTF-8 不带BOM → 中文100%乱码(最大坑)
UTF-8 带BOM → 完美兼容,无乱码
GBK(ANSI) → 可以正常运行,无乱码
(2)新版跨平台:PowerShell 7+
标准编码:UTF-8 无BOM
不推荐、不兼容GBK编码,使用GBK会乱码
2、结论
❌ 错误认知:PS1编码必须是GBK,不能用UTF-8
✅ 正确规则:现代PS1标准编码为UTF-8,GBK仅为老旧兼容格式
🏆 通用最优编码:UTF-8 with BOM(UTF-8带签名),新老版本PowerShell全部兼容
3、常用编辑器编码设置方法
VS Code:右下角编码处,手动选择 UTF-8 with BOM
系统记事本:另存为 → 编码选择UTF-8(记事本的UTF-8默认带BOM)
PowerShell ISE:默认保存为UTF-8带BOM,无需手动修改
4、编码优劣对比
✅ UTF-8带BOM:通用性强、支持跨平台、代码可上传Git、无中文乱码(主推)
❌ GBK:仅适配老旧Windows、跨系统必乱码、现代编辑器不推荐使用
PS1 文件基本结构
<#
.SYNOPSIS
示例 PS1 脚本:输出系统信息
#>
# 单行注释用 #
Write-Host "=== 系统信息 ===" -ForegroundColor Cyan
# 变量用 $
$os=Get-ComputerInfo -Property OsName, OsVersion
Write-Output "系统:$($os.OsName)"
# 函数
function Get-FreeSpace {
param([string]$drive="C")
Get-Volume -DriveLetter $drive | Select-Object DriveLetter, SizeRemaining
}
# 调用函数
Get-FreeSpace
注释:
\#单行、\<\# \.\.\. \#\>多行变量:
$变量名函数:
function 名 \{ \.\.\. \}流程:
if/else、foreach、switch等
1、零基础入门脚本示例(通俗易懂)
下面为极简入门案例,无复杂语法,适合新手抄写测试,覆盖最常用基础语法,可直接保存为ps1运行测试。
示例1:基础输出 + 变量使用
# 最简单的控制台输出
Write-Host "Hello PowerShell!" -ForegroundColor Green
# 定义变量、赋值、调用
$UserName = "运维测试"
$Num = 666
Write-Host "用户名:$UserName,数字:$Num"
示例2:条件判断(If 判断)
# 判断系统是否为Windows
$IsWin = $IsWindows
if ($IsWin -eq $true) {
Write-Host "当前运行环境:Windows 系统" -ForegroundColor Cyan
}
else {
Write-Host "当前运行环境:非Windows系统"
}
示例3:循环遍历(ForEach)
# 遍历数组,循环输出内容
$List = ["张三","李四","王五"]
foreach ($item in $List) {
Write-Host "遍历人员:$item"
}
示例4:简单文件操作(创建/写入/读取)
# 在桌面创建测试文本
$txtPath = "$env:Desktop\测试文件.txt"
# 写入内容
"PS1入门测试文本" | Out-File -Path $txtPath -Encoding UTF8
# 读取内容
Get-Content -Path $txtPath -Encoding UTF8
示例5:简易实用工具(查看本机IP)
# 获取本机IPv4地址
Get-NetIPAddress | Where-Object {$_.AddressFamily -eq "IPv4"} | Select-Object InterfaceAlias,IPAddress
2、入门脚本使用说明
运行方式:全部代码可直接复制,新建ps1文件保存后运行,无需额外环境依赖。
编码要求:入门脚本统一保存为UTF-8 with BOM,避免中文乱码。
语法特点:PowerShell 语法不区分大小写,代码缩进不强制,可读性优先即可。
颜色参数:
\-ForegroundColor为字体颜色,常用:Green、Red、Cyan、Yellow。
执行策略(必懂,否则无法运行)
默认策略:Restricted(受限)→ 禁止运行任何 ps1
1、查看当前策略
Get-ExecutionPolicy
2、常用策略级别(从严到宽)
Restricted:默认,不能运行任何脚本
AllSigned:所有脚本必须数字签名(含本地)
RemoteSigned(推荐):本地脚本可直接运行,网络下载脚本必须签名
Unrestricted:无限制(不推荐,不安全)
3、修改执行策略(管理员权限)
# 本地机器生效(常用)
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
# 当前用户生效(不影响他人)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
如何运行 PS1 脚本
假设脚本路径:D:\\scripts\\test\.ps1
1、PowerShell 中运行(推荐)
# 绝对路径
D:\scripts\test.ps1
# 相对路径(当前目录)
.\test.ps1
2、从 CMD 运行
powershell -ExecutionPolicy Bypass -File D:\scripts\test.ps1
3、右键运行
右键 \.ps1 → 使用 PowerShell 运行(不阻塞当前窗口)
必须加 & 符号才能运行的情况
& 的意思: 把后面的 字符串 当作 可执行程序运行
为什么要加 &?
- PowerShell 规定:如果路径包含空格、或者你想用变量运行脚本,前面必须加 &(调用运算符)
- 不加 &,PowerShell 会把路径当成字符串,而不是要执行的文件
必须加 & 的 3 种场景
- 路径里有空格
- 脚本路径存在变量里
- 你明确要把它当命令执行
示例 1:路径带空格(必须加 &)
& "D:\my scripts\test.ps1"
示例 2:路径存在变量里(必须加 &)
$file = "D:\scripts\test.ps1"
& $file
示例 3:当前目录带空格(必须加 &)
& ".\my test script.ps1"
PS1 与 .bat、.cmd 对比
| 特性 | .ps1(PowerShell) | .bat/.cmd(CMD) |
|---|---|---|
| 内核 | .NET 对象模型 | 文本流 |
| 功能 | 系统管理、WMI、.NET 调用 | 简单文件/命令调用 |
| 编码 | UTF-8优先,兼容GBK | 优先 GBK |
| 执行策略 | 有安全策略控制 | 无限制(默认) |
| 跨平台 | PowerShell 7+ 支持 | 仅 Windows |
常见问题与最佳实践
1、禁止运行脚本报错
原因:执行策略为 Restricted;解决:Set\-ExecutionPolicy RemoteSigned \-Scope CurrentUser
2、中文乱码问题
通用解决方案:脚本统一保存为 UTF-8 with BOM,彻底规避乱码;坚决不刻意保存为GBK。
3、最佳实践
脚本开头加
\<\# \.SYNOPSIS \.\.\. \#\>注释说明函数、参数化编写,避免硬编码路径
敏感脚本用 数字签名(
Set\-AuthenticodeSignature)统一编码:优先UTF-8带BOM,舍弃GBK
总结
.ps1 是 Windows 自动化的核心脚本格式,比传统 .bat 强大得多,能直接管理系统、调用 .NET、操作 WMI。核心重点:理解执行策略、分清新旧版本编码规则、优先使用UTF-8带BOM编码、规范脚本编写。熟练掌握可大幅提升Windows运维、批量自动化处理的工作效率。