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

PowerShell 7远程执行Get-Service时UserName字段缺失问题求助

问题原因分析
  • 权限与属性获取逻辑差异:本地执行Get-Service时,当前登录用户拥有足够权限,系统会自动调用Windows底层API读取服务的安全配置,从而填充UserName字段。但通过Invoke-Command远程执行时,默认远程会话权限受限,Get-Service返回的ServiceController对象不会主动加载UserName这个扩展属性——该属性实际需要从Win32_Service CIM实例中读取,而远程场景下Get-Service未触发这一读取流程。
  • PowerShell 6+的架构调整:PowerShell 6.0转向跨平台架构后,移除了Get-Service原Windows专属的-ComputerName参数,同时精简了Windows特有的服务属性绑定逻辑,导致远程执行时无法自动获取UserName字段。
  • 对象序列化限制:远程执行产生的ServiceController对象会被序列化后传输回本地,而UserName属于动态扩展属性,序列化过程中不会被保留,即便远程会话能获取到该值,也无法正常传递回来。

可行的替代方案

若需获取远程服务的运行账号,可直接在远程脚本块中使用CIM命令,示例如下:

Invoke-Command -ComputerName 'remoteServerName' -ScriptBlock {
    Get-CimInstance Win32_Service | Select-Object Name, StartName | Format-Table
}

上述命令中的StartName字段,与本地Get-Service返回的UserName对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:32:37