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

PowerShell如何将远程PC名称与BIOS序列号整合至同一表格?

解决方法

你可以通过在异步Job中构建包含PC名称和序列号的自定义对象,让Receive-Job返回关联的完整数据。以下是修改后的代码,同时加入了错误处理来应对远程PC不可达的情况:

# 遍历目标PC数组,启动异步Job
foreach ($pcName in $PCNameArray) {
    Start-Job -ScriptBlock {
        param($targetPC)
        try {
            # 获取BIOS信息(也可替换为Get-CimInstance Win32_BIOS,更推荐)
            $biosInfo = Get-WmiObject Win32_BIOS -ComputerName $targetPC -ErrorAction Stop
            # 返回包含PC名称、序列号和状态的自定义对象
            [PSCustomObject]@{
                PCName       = $targetPC
                SerialNumber = $biosInfo.SerialNumber.Trim()
                Status       = "Success"
            }
        }
        catch {
            # 捕获连接异常,记录错误信息
            [PSCustomObject]@{
                PCName       = $targetPC
                SerialNumber = $null
                Status       = "Failed: $($_.Exception.Message)"
            }
        }
    } -ArgumentList $pcName -Name "GetSerial_$pcName"
}

# 等待所有Job执行完成并接收结果
$results = Get-Job | Wait-Job | Receive-Job
# 清理已完成的Job
Get-Job | Remove-Job

# 输出整合后的表格
$results | Format-Table PCName, SerialNumber, Status -AutoSize

关键修改点

  • 传递PC名称参数:通过Start-Job的-ArgumentList将当前遍历的PC名称传入Job脚本块,确保每个Job都能关联对应的目标设备
  • 返回自定义对象:用[PSCustomObject]构建包含PCName、SerialNumber的结构化数据,替代仅返回序列号的方式,让结果天然关联PC名称
  • 错误处理:添加try/catch捕获远程连接失败的异常,避免单个PC出错导致Job无输出,同时记录状态方便排查问题
  • Job命名(可选):给每个Job命名为GetSerial_$pcName,方便后续手动管理(比如查看单个Job状态)

如果你倾向于使用更现代的CIM命令,只需将代码中的Get-WmiObject替换为Get-CimInstance即可,两者逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:31:06