You need to enable JavaScript to run this app. 使用Invoke-Command远程执行Get-ComputerInfo返回格式异常的原因及解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Invoke-Command远程执行Get-ComputerInfo返回格式异常的原因及解决

异常原因

PowerShell 远程调用过程中,所有跨机器返回的对象都会经过序列化、反序列化流程:远程主机执行完脚本块后,会将结果对象序列化为 CLIXML 格式传输到本地,本地再将其反序列化为可操作对象。
这个转换过程会丢失原始对象的强类型信息:OsProductType 原本是 [Microsoft.PowerShell.Commands.OSProductType] 枚举类型,反序列化后会被包装为通用的反序列化对象,实际枚举值存储在该对象的Value属性中,你看到的类子对象结构就是这个包装结构导致的。
另外输出中的PSComputerName、RunspaceId是Invoke-Command默认给所有远程返回对象附加的元属性,用来标记对象的来源信息,本地执行不会生成这类属性。

解决方案

方案1:远程侧直接返回基础类型(推荐,返回结果和本地完全一致)

在远程执行的脚本块内就将属性转换为字符串等基础类型,避免序列化丢失类型信息:

$ComputerInfo = Invoke-Command -ComputerName $FQDN -ScriptBlock {
    $rawInfo = Get-ComputerInfo -Property OsName, OsProductType
    return [PSCustomObject]@{
        OsName = $rawInfo.OsName
        OsProductType = $rawInfo.OsProductType.ToString()
    }
} | Select-Object OsName, OsProductType

末尾的Select-Object用来过滤掉Invoke-Command附加的元属性,最终返回的对象结构和本地执行结果完全一致。

方案2:本地侧适配反序列化结构

如果不想修改远程调用逻辑,本地取值时直接访问Value属性即可拿到实际值:

# 直接取包装对象的Value属性获取真实值
$ComputerInfo.OsProductType.Value

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 21:15:06