求助:通过PowerShell远程获取本地用户及其所属组信息
高效远程获取目标计算机本地用户及其所属组信息
我之前帮别人处理过类似的问题,你用Get-LocalUser、Get-LocalGroupMember或者直接调用WMI逐个查询的方式,确实会因为频繁建立远程连接、冗余数据返回导致速度拖沓,而且信息整理起来也麻烦。这里有个优化方案,通过CIM会话复用+关联查询的方式,大幅提升效率,同时输出你需要的格式:
优化后的PowerShell脚本
param( [Parameter(Mandatory=$true)] [string]$ComputerName ) # 建立持久化CIM会话,减少重复远程连接开销 try { $cimSession = New-CimSession -ComputerName $ComputerName -ErrorAction Stop # 只查询启用的本地用户(可根据需求调整过滤条件) $localUsers = Get-CimInstance -CimSession $cimSession -ClassName Win32_UserAccount ` -Filter "LocalAccount='True' AND Disabled='False'" # 一次性获取所有用户-组关联关系 $userGroupLinks = Get-CimInstance -CimSession $cimSession -ClassName Win32_GroupUser # 获取所有本地组信息 $localGroups = Get-CimInstance -CimSession $cimSession -ClassName Win32_Group ` -Filter "LocalAccount='True'" # 构建用户与所属组的映射表 $userGroupMap = @{} foreach ($link in $userGroupLinks) { # 从WMI路径中提取用户名和组名 $userName = ($link.PartComponent -split '="')[1].TrimEnd('"') $groupName = ($link.GroupComponent -split '="')[1].TrimEnd('"') # 确保用户是我们要查询的本地用户 if ($localUsers.Name -contains $userName) { if (-not $userGroupMap.ContainsKey($userName)) { $userGroupMap[$userName] = @() } $userGroupMap[$userName] += $groupName } } # 格式化输出为指定表格样式 $result = $userGroupMap.GetEnumerator() | ForEach-Object { [PSCustomObject]@{ User = $_.Key Memberof = $_.Value -join ', ' } } # 显示结果,如需导出可追加 | Export-Csv -Path "LocalUserGroups.csv" -NoTypeInformation $result | Format-Table -AutoSize } catch { Write-Error "远程连接或查询失败:$_" } finally { # 清理CIM会话 if ($cimSession) { Remove-CimSession -CimSession $cimSession } }
为什么这个脚本更快?
- 复用CIM会话:
New-CimSession建立一次远程连接后,所有查询都复用这个连接,避免了每次查询都重新握手的开销 - 关联查询减少调用:通过
Win32_GroupUser直接获取用户和组的绑定关系,不需要循环遍历每个用户再查询其所属组,减少了N次远程调用 - 过滤冗余数据:通过Filter只获取启用的本地用户,避免返回系统内置的特殊用户(比如Guest、默认Administrator,可根据需求修改Filter)
使用说明
- 确保目标计算机已启用WinRM:如果未启用,可在目标机执行
Enable-PSRemoting -Force(需要管理员权限) - 运行脚本时指定目标计算机名:
.\Get-RemoteLocalUserGroups.ps1 -ComputerName "TargetPC01" - 如果需要导出结果到CSV,在
Format-Table前追加| Export-Csv -Path "你的文件路径.csv" -NoTypeInformation
内容的提问来源于stack exchange,提问作者Uddhav Ghanekar
相关产品推荐
相关产品推荐

