从命令行到自动化:PowerShell脚本编写实战指南
第一次打开PowerShell时,那个闪烁的光标仿佛在嘲笑我的无知。记得三年前接手一个服务器迁移项目,需要批量修改上千个文件的权限。当我发现同事用5行PowerShell脚本完成了我需要三天手工操作的工作时,那种震撼至今难忘。这就是PowerShell的魅力——将重复劳动转化为优雅的自动化。
1. 环境准备:选择你的武器
1.1 PowerShell ISE vs VSCode
工欲善其事,必先利其器。Windows自带的PowerShell ISE和跨平台的VSCode是两大主流选择:
| 特性 | PowerShell ISE | VSCode + PowerShell扩展 |
|---|---|---|
| 启动速度 | 快 | 中等 |
| 调试功能 | 基础 | 强大 |
| 扩展性 | 有限 | 丰富 |
| 跨平台支持 | 仅Windows | 全平台 |
| 智能提示 | 基础 | 高级 |
提示:新手可以从ISE开始熟悉基本概念,当需要复杂项目开发时再切换到VSCode
1.2 基础配置检查
在开始编写脚本前,先确认你的环境状态:
# 查看PowerShell版本
$PSVersionTable.PSVersion
# 检查已安装模块
Get-Module -ListAvailable
# 验证执行策略
Get-ExecutionPolicy
典型输出结果:
Major Minor Build Revision
----- ----- ----- --------
5 1 19041 1320
2. 你的第一个实用脚本
2.1 从需求出发:日志清理自动化
假设我们需要定期清理超过30天的日志文件,手动操作既耗时又容易出错。下面是一个完整的解决方案:
# LogCleaner.ps1
param (
[string]$logPath = "C:\Logs",
[int]$daysToKeep = 30
)
$cutoffDate = (Get-Date).AddDays(-$daysToKeep)
$files = Get-ChildItem -Path $logPath -File -Recurse | Where-Object { $_.LastWriteTime -lt $cutoffDate }
if ($files.Count -gt 0) {
$files | Remove-Item -Force -Verbose
Write-Output "已清理 $($files.Count) 个过期日志文件"
} else {
Write-Output "未找到需要清理的日志文件"
}
2.2 脚本结构解析
一个规范

&spm=1001.2101.3001.5002&articleId=160329773&d=1&t=3&u=40efb551c8944ed682bfd5a47b814c7c)

被折叠的 条评论
为什么被折叠?



