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

Invoke-Command远程获取证书FriendlyName与本地执行结果不一致

PowerShell远程调用无法获取证书FriendlyName的解决方法

问题原因

通过Invoke-Command远程获取证书对象时,PowerShell会将对象序列化后传回本地。证书的FriendlyName属于扩展属性,并非默认序列化的核心属性,反序列化后本地无法正确读取该值,导致输出空行;而本地直接执行时访问的是实时证书对象,能正常获取所有属性。

解决方案

方案1:在远程脚本块中直接提取FriendlyName

直接在远程端将FriendlyName提取为字符串返回,避免对象序列化带来的属性丢失:

$certFriendlyNames = Invoke-Command -ComputerName $computername -ScriptBlock { 
    Get-ChildItem Cert:\LocalMachine\My | Select-Object -ExpandProperty FriendlyName
}

foreach ($name in $certFriendlyNames) {
    $name
}

方案2:远程返回包含所需属性的自定义对象

如果需要同时获取其他证书属性,在远程脚本块中通过Select-Object指定需要的属性,返回自定义对象,确保序列化后本地能正确读取:

$certificates = Invoke-Command -ComputerName $computername -ScriptBlock { 
    Get-ChildItem Cert:\LocalMachine\My | Select-Object FriendlyName, Thumbprint, Subject
}

foreach ($certificate in $certificates) {
    $certificate.FriendlyName
}

方案3:强制刷新远程证书存储(针对刚添加的证书)

如果怀疑是远程证书存储未刷新导致友好名称未同步,可在远程脚本块中手动刷新证书存储后再获取:

$certificates = Invoke-Command -ComputerName $computername -ScriptBlock { 
    $store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My", "LocalMachine")
    $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadOnly)
    $certs = $store.Certificates
    $store.Close()
    $certs | Select-Object FriendlyName, Thumbprint
}

foreach ($certificate in $certificates) {
    $certificate.FriendlyName
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:30:12