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

在以SYSTEM身份运行的RMM软件PowerShell中获取实际登录用户

获取Windows实际交互式登录用户名(解决RMM脚本SYSTEM权限问题)

你的问题核心是RMM脚本以SYSTEM权限运行,导致[Environment]::UserName和$env:USERNAME都返回SYSTEM,而非实际登录的交互式用户。以下是两种可靠的解决方案:

方法1:通过Win32_ComputerSystem直接获取(简单高效)

Win32_ComputerSystem的UserName属性会直接返回当前活跃的交互式登录用户(即使脚本以SYSTEM身份执行),格式通常为域\用户名,我们可以拆分提取纯用户名:

# 获取当前交互式登录用户
$loggedOnUser = Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -ExpandProperty UserName

# 提取用户名部分(处理域\用户格式)
$benutzer = if ($loggedOnUser) { $loggedOnUser.Split('\')[-1] } else { [Environment]::UserName }

# 执行代理重命名操作
Set-ItemProperty -Path "HKLM:\Software\MMSOFT Design\PC Monitor" -Name ComputerName -Value "$env:USERDOMAIN - $env:Computername - $benutzer"

方法2:筛选交互式登录会话(更精准)

如果机器存在多个登录会话(比如远程桌面+本地登录),可以通过Win32_LoggedOnUser筛选出交互式会话(LogonType为2=本地交互式,10=远程交互式):

# 筛选活跃的交互式登录用户
$loggedOnUser = Get-CimInstance Win32_LoggedOnUser | 
    Where-Object { 
        $_.Antecedent -match 'Name="(.*?)"' -and 
        $_.Dependent.LogonType -in 2, 10 
    } |
    ForEach-Object { $matches[1] } |
    Select-Object -First 1

# 兜底逻辑:无活跃用户时用SYSTEM
$benutzer = $loggedOnUser ?? [Environment]::UserName

# 执行代理重命名操作
Set-ItemProperty -Path "HKLM:\Software\MMSOFT Design\PC Monitor" -Name ComputerName -Value "$env:USERDOMAIN - $env:Computername - $benutzer"

注意事项

  • 如果机器处于无人登录状态(比如服务器),两种方法都会返回null,这时候脚本会自动用SYSTEM作为兜底值,避免报错。
  • Get-CimInstance是PowerShell 3.0及以上版本的推荐命令,比旧的Get-WmiObject性能更好且更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:06:38