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

如何使用嵌套ForEach-Object?需在内部访问外层循环对象值

嵌套ForEach-Object中访问外层循环变量的方法

在PowerShell的嵌套ForEach-Object里,内层的$_会覆盖外层的管道变量,导致你无法直接通过$_获取外层的应用名称。解决这个问题有两种常用方法:

方法一:将外层变量存入自定义变量

在外层循环中,先把当前的应用名称赋值给一个自定义变量,内层循环直接调用这个变量即可:

@(
    "Microsoft Teams",
    "Microsoft Teams Meeting Add-in for Microsoft Office",
    "Teams Machine-Wide Installer"
) | ForEach-Object {
    # 保存外层循环的当前应用名称
    $currentApp = $_
    "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | ForEach-Object {
        # 同时访问外层应用名称和内层注册表路径
        Write-Host "应用: $currentApp,注册表路径: $_"
    }
}

方法二:使用-PipelineVariable参数(PowerShell 4.0+)

通过-PipelineVariable(可简写为-pv)参数,将外层循环的对象绑定到指定变量,后续管道中直接调用该变量即可,无需额外赋值:

@(
    "Microsoft Teams",
    "Microsoft Teams Meeting Add-in for Microsoft Office",
    "Teams Machine-Wide Installer"
) | ForEach-Object -PipelineVariable app {
    "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | ForEach-Object {
        Write-Host "应用: $app,注册表路径: $_"
    }
}

两种方法都能实现需求,第一种逻辑更直观,适合新手;第二种写法更简洁,适合熟悉PowerShell高级特性的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:51:11