You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell 5.1中实现类似Bash的多组大括号展开?

PowerShell 5.1实现Bash风格的批量主机名生成与Ping操作

当前使用的是Windows 10自带的PowerShell版本,具体信息如下:

$PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.4291
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.4291
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1 

在Bash中可通过多组大括号展开一次性生成组合列表,例如以下命令会生成18个主机名并逐个执行Ping操作:

for s in FISP{CC,CDS,TAP}PGS{302,405}{a,b,c}; do ping -c3 $s; done

现需在PowerShell 5.1中实现相同功能,替代以下嵌套循环写法:

foreach ($app in "CC","CDS","TAP") 
{ 
    foreach ($client in 302,405) 
    { 
        foreach ($node in "a","b","c") 
        { 
            $s="FISP${app}PGS${client}${Node}"
            ping $s
        } 
    } 
}

方法一:管道链式笛卡尔积生成(原生PowerShell风格)

通过嵌套管道一次性生成所有主机名组合,无需多层循环结构:

"CC","CDS","TAP" | ForEach-Object {
    $app = $_
    302,405 | ForEach-Object {
        $client = $_
        "a","b","c" | ForEach-Object { "FISP${app}PGS${client}$_" }
    }
} | ForEach-Object { ping $_ }

若追求极致简洁,可压缩为一行(%是ForEach-Object的别名):

"CC","CDS","TAP"|%{$a=$_;302,405|%{$c=$_;"a","b","c"|%{"FISP${a}PGS${c}$_"}}}|%{ping $_}

方法二:LINQ查询语法生成主机名

用声明式的LINQ查询语法生成完整主机名列表,再批量执行Ping:

$hosts = (
    from $app in "CC","CDS","TAP"
    from $client in 302,405
    from $node in "a","b","c"
    select "FISP${app}PGS${client}${node}"
)
$hosts | ForEach-Object { ping $_ }

方法三:模拟Bash大括号展开(仅作参考)

若想模仿Bash的大括号语法,可通过字符串替换实现,但可读性较差,适合简单场景:

$pattern = "FISP{CC,CDS,TAP}PGS{302,405}{a,b,c}"
# 递归替换大括号内的组合
while ($pattern -match '\{([^{}]+)\}') {
    $parts = $matches[1] -split ','
    $pattern = $pattern -replace $matches[0], ($parts -join ' ')
}
# 拆分生成主机名并执行Ping
$pattern -split ' ' | ForEach-Object { ping $_ }

内容的提问来源于stack exchange,提问作者RonJohn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:52:03