如何校验远程CimSession所用凭据是否具备远程计算机管理员权限
你可以通过已有的CimSession直接完成管理员权限校验,无需额外建立其他远程连接,以下是两种常用的实现方案:
方案1:校验当前凭据所属用户是否在远程计算机管理员组
该方案通过查询远程本地管理员组的成员列表,匹配当前CimSession使用的凭据身份:
# 替换为你已创建的CimSession实例变量 $cimSession = <你的CimSession对象> # 获取当前会话使用的用户名 $currentLogin = $cimSession.Credential.UserName # 查询远程本地管理员组 $remoteAdminGroup = Get-CimInstance -ClassName Win32_Group -Filter "Name='Administrators' AND LocalAccount='True'" -CimSession $cimSession # 拉取管理员组所有成员 $adminMembers = Get-CimAssociatedInstance -InputObject $remoteAdminGroup -ResultClassName Win32_UserAccount -CimSession $cimSession | Select-Object -ExpandProperty Caption if ($adminMembers -contains $currentLogin) { Write-Host "当前凭据属于远程管理员组" } else { Write-Host "当前凭据不属于远程管理员组" }
方案2:通过权限敏感操作校验真实权限
该方案更贴合实际使用场景,可绕过UAC远程令牌过滤的干扰,直接校验当前会话是否真的持有管理员权限:
# 替换为你已创建的CimSession实例变量 $cimSession = <你的CimSession对象> try { # 调用仅管理员可访问的StdRegProv类读取HKLM下的SAM注册表项 $regProvider = Get-CimInstance -Namespace root/default -ClassName StdRegProv -CimSession $cimSession -ErrorAction Stop $operResult = $regProvider.EnumKey(2147483650, "SAM") # 2147483650为HKLM根键的常量值 if ($operResult.ReturnValue -eq 0) { Write-Host "当前凭据持有远程计算机管理员权限" } else { Write-Host "当前凭据无远程计算机管理员权限" } } catch { Write-Host "当前凭据无远程计算机管理员权限,操作被拒绝" }
两种方案可根据你的使用场景选择:如果仅需要判断用户身份归属选方案1,需要校验实际生效的权限选方案2。
内容的提问来源于stack exchange,提问作者Gurax
相关产品推荐
相关产品推荐

