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

PowerShell foreach循环远程获取进程无结果问题

遍历服务器列表执行Invoke-Command时进程结果不显示的解决方法

问题场景

登录每台服务器拉取进程信息,单独查询单台服务器时能正常输出进程结果,但使用ForEach-Object遍历服务器列表执行时,进程结果未显示。

相关代码

$serverListFile = "servers.csv"
$global:ServerLists = Import-Csv -Path $global:ScriptPath\$ServerListFile -Delimiter "," | ForEach-Object  {
    $_.servers

    $currentServer = $_.servers
    Write-Host $currentServer

    Write-Host "Getting first 5 Processes on" $currentServer

    Invoke-Command -ComputerName $_.servers -Credential $Cred -ScriptBlock {
        Get-Process | Select-Object -First 5
    }
}

执行结果

Server1
Getting first 5 Processes on Server1
Server2
Getting first 5 Processes on Server2
Server3
Getting first 5 Processes on Server3

问题原因

代码中ForEach-Object块开头的$_.servers是多余的,它会将当前服务器名称输出到管道,抢占了Invoke-Command返回的进程对象的输出位置,导致进程结果无法显示。同时,将ForEach-Object的结果赋值给全局变量时,Write-Host的控制台输出和管道输出的优先级问题也会干扰进程结果的呈现。

解决方案

方案1:保存结果并显示

修改代码,移除多余的$_.servers,显式收集并显示进程结果:

$serverListFile = "servers.csv"
$global:ServerLists = Import-Csv -Path $global:ScriptPath\$ServerListFile -Delimiter "," | ForEach-Object  {
    $currentServer = $_.servers
    Write-Host "`nGetting first 5 Processes on $currentServer" -ForegroundColor Cyan

    # 执行远程命令并获取进程结果
    $processes = Invoke-Command -ComputerName $currentServer -Credential $Cred -ScriptBlock {
        Get-Process | Select-Object -First 5
    }
    
    # 将结果输出到控制台
    $processes | Out-Host
    # 将结果存入全局变量
    $processes
}

方案2:仅显示结果(不保存)

如果不需要将结果存入全局变量,简化代码如下:

$serverListFile = "servers.csv"
Import-Csv -Path $global:ScriptPath\$ServerListFile -Delimiter "," | ForEach-Object  {
    $currentServer = $_.servers
    Write-Host "`nGetting first 5 Processes on $currentServer" -ForegroundColor Cyan
    # 直接输出进程结果到控制台
    Invoke-Command -ComputerName $currentServer -Credential $Cred -ScriptBlock {
        Get-Process | Select-Object -First 5
    } | Out-Host
}

说明

单独查询单台服务器时正常,是因为没有ForEach-Object中多余的$_.servers输出干扰,Invoke-Command的结果能直接输出到控制台。修改后通过移除干扰输出、显式控制结果的显示/存储,就能解决遍历列表时进程结果不显示的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:12:51