文档首页> 技术教程> PowerShell 批量改配置的两个小例子

PowerShell 批量改配置的两个小例子

发布时间:2026-06-11 15:55        更新时间:2026-06-12 02:39
批量操作的核心不是背多少命令,是理解管道:左边命令的输出,直接作为右边命令的输入。拿两个小例子走一遍,思路就通了。 例子一:批量建目录 给 12 个月的归档各建一个目录,一行命令: 1..12 | ForEach-Object { New-Item -ItemType Directory -Path "D:\archive\2026-$_" -Force } 左边 1..12 产生 1 到 12 的序列,管道把每个数字逐个交给 ForEach-Object 处理,$_ 代表当前数字。要按部门建几十个目录,把数字换成名称数组:"finance","hr","it",写法不变。路径建议提出来:$base = "D:\archive",引用处写 "$base\2026-$_",换盘符改一行就行。 例子二:批量改防火墙规则 把所有显示名带 Web 的防火墙规则统一启用: Get-NetFirewallRule -DisplayName "*Web*" | Set-NetFirewallRule -Enabled True 前半段查出所有匹配的规则对象,管道把对象原样递给后半段逐条修改。动手前想先预览,把后半段换成 Select-Object DisplayName,Enabled,只看不改;确认列表无误,再执行真正的修改。 管道里传的是对象 和文本拼接不同,PowerShell 管道传的是带属性的完整对象,所以中间可以随意插过滤和加工,前后命令不用改: Get-Service | Where-Object Status -eq "Running" | Select-Object -First 5 Where-Object 按属性筛选,Select-Object 挑列或限量,排在前面的命令负责"查什么",排在后面的负责"怎么用"。对象还有个好处:出错时错误信息跟着对象走,管道哪一环断了、断在谁身上,报错里写得明明白白。 预演与验证 改写类命令多数支持 -WhatIf:在 New-Item 后面加上它,命令只会告诉你"将要做"什么而不真做,批量操作前先跑一遍 -WhatIf 是保命习惯。统计也能用管道:Get-ChildItem D:\archive | Measure-Object Length -Sum 直接得出文件数和总大小,建没建齐一眼便知。防火墙这类改动,先在一台机器上跑通并验证业务,确认无误再把同一条命令套到其他机器,别跳过单机验证直接全量执行。 两个例子共用同一个思路:先想清楚"查什么",再用管道把结果交给"改什么"。几十台机器的活和一台机器的活,命令结构是一样的,差别只在对象列表怎么来。查什么、怎么改分开写还有个隐藏好处:查询命令留着不动,只替换后半段,回滚和排错都只动一小截。