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

使用本地账户执行Get-Service,如何合并输出为带计算机名的统一列表

实现统一格式的跨计算机服务列表输出

问题分析

原脚本存在两个核心问题:

  1. 使用Enter-PSSession交互式远程会话,导致输出按计算机分段,无法直接合并;
  2. Get-Service的-ComputerName参数错误传入整个计算机数组,会在每台机器上重复查询所有目标计算机。

修正后的脚本(匹配期望输出格式)

$computers = @"
computer1
computer2
"@ -split [Environment]::NewLine

# 预创建凭据,避免循环内重复生成
$ServerUserId = "_$\user1"
$ServerPassword = ConvertTo-SecureString -String 'complexpassword' -AsPlainText -Force
$Credential = New-Object -TypeName PSCredential -ArgumentList $ServerUserId, $ServerPassword

$computers | ForEach-Object {
    $currentPC = $_
    # 远程执行服务查询,返回结果后拼接格式
    Invoke-Command -ComputerName $currentPC -Credential $Credential -ScriptBlock {
        Get-Service -Name Service*
    } | ForEach-Object {
        "$($_.Name) $currentPC"
    }
}

脚本修改说明

  • 替换交互式会话为Invoke-Command:批量远程执行更高效,直接返回服务对象而非分段文本;
  • 凭据移至循环外:减少重复操作,提升执行效率;
  • 精准查询单台计算机:每轮循环仅查询当前目标计算机的服务;
  • 自定义输出格式:通过ForEach-Object拼接服务名与计算机名,完全匹配期望的纯文本列表。

输出示例

ServiceA computer1
ServiceB computer1
ServiceY computer2
ServiceZ computer2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:54:57