PowerShell 脚本入门:从写第一行 .ps1 到自动处理日常任务

2026-10-25

标签PowerShell脚本自动化

在「终端」里一条条敲命令,做一次两次可以;要重复做的事(每天的备份、清理临时文件、批量改名),就该交给脚本。PowerShell 就是 Windows 自带的这个「自动化车间」,它既能当命令行用,也能把多条命令写进一个 .ps1 脚本文件一次跑完。这篇带你从零开始。

先搞清楚:PowerShell 和 CMD / 批处理什么关系

  • CMD(命令提示符):老一代命令行,输入的是 DOS 风格命令;
  • 批处理(.bat / .cmd):把 CMD 命令写成脚本,适合简单顺序任务;
  • PowerShell:微软新一代命令行与脚本环境,命令输出的是结构化对象(不只是文本),还能调用 .NET 和系统接口,能力远强于 CMD。

日常「跑一条命令」用哪个都行;凡是需要条件判断、批量遍历、与系统功能深度打交道的自动化,优先选 PowerShell 脚本。它的命令(叫 cmdlet,读作 command-let)统一是「动词-名词」形式,比如 Get-Process、Set-ExecutionPolicy,记起来有规律。

执行策略:第一次运行脚本常见报错的解法

双击或运行 .ps1 脚本时提示「无法加载文件,因为在此系统上禁止运行脚本」,这是 Windows 的安全机制——执行策略(Execution Policy)默认不放行。它不是出错了,是需要你按需放开。

先看当前策略(推荐第一步):

Get-ExecutionPolicy -List

会列出各作用域(MachinePolicy / UserPolicy / Process / CurrentUser / LocalMachine)的值。想允许运行「自己写的本地脚本」,最稳妥的是只对当前用户放开:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

RemoteSigned 的含义是:本地创建的脚本可运行,从互联网下载的脚本需要数字签名——既方便又保留了防线。按提示输入 Y 确认即可。

其他可选策略:

| 策略 | 含义 | 适用场景 | |------|------|----------| | Restricted | 禁止运行任何脚本(默认) | 只看不能跑 | | RemoteSigned | 本地脚本可运行,远程脚本需签名 | 个人日常(推荐) | | AllSigned | 所有脚本都需可信签名 | 高安全环境 | | Bypass | 全部放行 | 临时测试,不建议持久设置 |

临时跑一次不想改策略,也可以用:

powershell -ExecutionPolicy Bypass -File "C:\路径\脚本.ps1"

只对本次会话生效,不改系统设置。

创建你的第一个脚本

用记事本(或 VS Code)新建文件,写三行:

$name = Read-Host "请输入你的名字"
Write-Host "你好,$name!今天是 $(Get-Date -Format 'yyyy-MM-dd')"

保存为 hello.ps1(注意扩展名要选「所有文件」,编码建议 UTF-8)。然后在 PowerShell 里进入该目录并运行:

.\hello.ps1

脚本可执行了。脚本里出现的几个基础概念:

  • $变量名:定义变量,$name 存用户输入;
  • Read-Host:等待用户输入一行文字;
  • Write-Host:打印文字到屏幕;
  • $( ):在字符串里内嵌命令结果。

最常用的命令与组合套路

| 场景 | 命令 | |------|------| | 列出正在运行的进程 | Get-Process | | 按名称结束进程 | Stop-Process -Name notepad | | 查看服务状态 | Get-Service | | 重启某服务 | Restart-Service -Name wuauserv | | 列出磁盘占用 | Get-PSDrive -PSProvider FileSystem | | 筛选结果 | Get-Process | Where-Object { $_.WS -gt 300MB } | | 排序并取前 10 | Get-Process | Sort-Object WS -Descending | Select-Object -First 10 |

组合的核心是管道符 |:把左边命令输出的对象流给右边处理。上面几行已经能覆盖「查什么、筛什么、排什么」三类最常见需求。

写一个实用的自动清理脚本

下面这个脚本删除临时文件夹里超过 7 天未访问的文件,适合加到任务计划里定期执行(配合站内「任务计划程序」一文可以做到无人值守):

$cutoff = (Get-Date).AddDays(-7)
Get-ChildItem "$env:TEMP" -Recurse -File |
    Where-Object { $_.LastAccessTime -lt $cutoff } |
    Remove-Item -Force
Write-Host "已清理临时文件中超过 7 天的部分。"

第一次运行建议先不加最后一行删除命令,改成只 Select-Object 输出预览,确认结果正确再真正执行删除——脚本操作文件时,「先预览后执行」是避免误删的通用纪律。

脚本安全:四条边界要守住

  1. 不要随便运行网上下载的脚本:先打开文件通读一遍,确认没有可疑操作(改注册表、下载执行远程内容等)再运行;
  2. 执行策略只放开到够用:个人电脑 RemoteSigned -Scope CurrentUser 通常是合理的上限,不必为了省事设 Bypass;
  3. 重要操作加确认或日志:涉及删除、覆盖的脚本,可加入参数 -WhatIf(PowerShell 内置的「演练模式」)先看会做什么;
  4. 涉及管理员权限的脚本:右键「以管理员身份运行」PowerShell 再执行;普通脚本不要随意用管理员权限跑。

想进一步学什么

  • 条件与循环:if / foreach / while,让脚本学会「判断后执行」;
  • 函数与模块:把常用逻辑封装成函数,脚本更整洁;
  • 远程管理(进阶):Invoke-Command 可对多台电脑批量执行命令,适合机房和办公网场景。

PowerShell 的官方文档在微软 Learn 网站可免费查阅,按「基础概念 → 常用 cmdlet → 脚本语言」的顺序学,两三周就能应付日常自动化。

保存与运行脚本的三个实用细节

  1. 双击 .ps1 默认不会直接执行:它可能用记事本打开,这是安全设计。正确运行方式是右键脚本选「使用 PowerShell 运行」,或在 PowerShell 里输入 .\脚本名.ps1;
  2. 路径带空格时要加引号:.\我的 脚本.ps1 会解析错,应写成 .\"我的 脚本.ps1" 或用无空格文件名;
  3. 编码建议存成 UTF-8 with BOM:记事本默认保存 UTF-8 时,若脚本里包含中文字符,旧版 Windows PowerShell 可能显示乱码或报错,可另存为「UTF-8 with BOM」编码后再运行。

另外补充一点取舍:单纯几行顺序命令、只需要 CMD 语法的简单自动化,用批处理(.bat)也很顺手(站内「批处理脚本入门」一文有系统介绍);一旦涉及对象筛选、系统服务、网络、深度文件操作,PowerShell 的表达能力明显更强。两者不是竞争关系,按任务复杂度选择即可。

做完这几件再收工

  • 运行 Get-ExecutionPolicy -List,看懂当前各作用域的策略值。
  • 按需执行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 放开本地脚本。
  • 用记事本写一个 hello.ps1,在 PowerShell 中执行通过。
  • 把「清理 7 天前临时文件」脚本先以预览模式跑一遍,确认无误。
  • 记住「不运行来历不明的脚本、重要操作先 -WhatIf 预览」两条安全底线。