PowerShell 跨平台自动化入门:如何在 Windows、Linux、macOS 上快速跑通脚本
【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell
凌晨收到告警,要同时检查十台 Windows 服务器的某个服务是不是停了。手动一台台点过去?不现实。PowerShell 就是干这个的:一个跑在 Windows、Linux、macOS 三个系统上的命令行工具和脚本语言,同一套Get-Service、Get-ChildItem命令,在哪台机器上都是这个写法。
⏱️ 3分钟安装并跑通第一条命令
- 安装:Windows 上从微软商店装 PowerShell 7,Linux 用系统包管理器或官方安装脚本,macOS 用 Homebrew。装完你会多一个
pwsh命令。 - 验证:在终端输入
pwsh启动,再输入$PSVersionTable。
这条命令打印版本信息表,看到PSVersion和Platform两行,就说明装好了。整个过程不超过三分钟。
🌐 如何跨平台执行服务检查
运维最常遇到的场景:一批机器混着 Windows 和 Linux,检查服务状态得用两套命令,sc query和systemctl来回切。
在 pwsh 里直接运行Get-Service。人话解释:这条命令列出系统里所有服务的名字、启动方式和当前状态,停掉的服务一眼就能看出来。
同一台 Linux 机器上,Get-Service同样能查到 systemd 管理的服务。你原来写给 Windows 的检查脚本,改两行路径就能在 Linux 上跑,不用重写。
📁 如何批量整理文件和重命名
几百个日志文件散在目录里,要统一加日期前缀。资源管理器里点鼠标?点到手软。
在 pwsh 里用管道符把两步串起来:Get-ChildItem列出文件,传给Rename-Item改名,一条管道命令一次跑完。
人话解释:管道符|的意思是"把上一步的结果喂给下一步",这是 PowerShell 和普通命令行最大的区别——后面接着看模块管理时还会用到。
新手常踩的3个坑
问:终端提示"命令无法识别",明明已经装了?
现象:在 Linux 里敲powershell没反应。原因是 Linux 和 macOS 上这个可执行文件叫pwsh,powershell只是 Windows 老版本的叫法。改用pwsh启动即可。
问:脚本文件一运行就提示"禁止运行脚本"?
现象:.ps1文件双击或执行被拦截。原因是 PowerShell 默认执行策略只放行签名脚本。执行一次Set-ExecutionPolicy RemoteSigned(意思是"本机自己写的脚本放行,下载的要签名"),之后就不会再拦。
问:Windows 上的结果和我电脑上不一样?
现象:同一个命令行为不一致。原因是 Windows 自带的是 Windows PowerShell 5.1,和新开源的 PowerShell 7 是两条线,7 的版本号才对应 Linux/macOS。用$PSVersionTable看一眼当前跑的是哪个,心里就有数了。
项目结构速览
想深入看实现,源码按模块划分得很清楚:
- 引擎核心在 src/System.Management.Automation/,解析器、管道、执行上下文都在这
- 管理命令实现在 src/Microsoft.PowerShell.Commands.Management/,
Get-Service、Get-Process这些服务检查命令的 C# 源码就在此 - 各平台构建说明在 docs/building/,Linux、Windows、macOS 各一份
- 测试用例在 test/powershell/,想看某条命令的预期行为,这里能找到对应的验证脚本
PowerShell 的价值在于一套命令覆盖三个系统,服务器管理不用再记两套语法。下一步:装好后进终端敲一次$PSVersionTable确认版本,然后照着 docs/FAQ.md 里的学习路径,从第一条脚本写起。
关键词:PowerShell、跨平台、自动化脚本、命令行工具、系统管理
【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考