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

PowerShell脚本问题:无法筛选非管理员组的远程PS启用用户

问题排查与修正方案

你的脚本存在几个关键问题,直接导致$UsersNotDA始终为空:

1. Out-String破坏了数组结构

你在获取管理员组成员和远程PS用户时都用了| Out-String,这会把原本的字符串数组转换成一个单个多行字符串。比如$DomainAdmins原本应该是["admin1", "admin2"]这样的数组,用Out-String后变成了"admin1nadmin2"(换行分隔的单个字符串),此时-notin`对比完全失效——你是在拿单个字符串和另一个单个字符串匹配,而非数组元素之间的对比。

2. 变量名拼写错误

你写的判断条件是$_.samaccountname -notin $DomainAdmin,但定义的管理员组变量是$DomainAdmins(多了个s),这里引用了未定义的$DomainAdmin(默认值为$null),逻辑完全错误。

3. $UserswithRemotePS的处理错误

你先提取了.samaccountname得到用户账号数组,随后又用| Out-String把它转成了单个字符串,之后在Where-Object里还试图访问$_.samaccountname——但此时$UserswithRemotePS是字符串,根本没有这个属性,$_.samaccountname返回$null,自然筛选不到任何结果。


修正后的完整脚本

# 获取两个管理员组的成员账号(保留数组,禁用Out-String)
$DomainAdmins = (Get-ADGroupMember -Identity "Domain Admins").samaccountname
$ExchangeAdmins = (Get-ADGroupMember -Identity "ExchangeAdmins").samaccountname

# 合并两个组的账号并去重,简化后续筛选逻辑
$AdminAccounts = $DomainAdmins + $ExchangeAdmins | Select-Object -Unique

# 清理现有Exchange会话并新建
Get-PSSession | Remove-PSSession
$ExchangePSSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://ExchangeServer/PowerShell/ -Authentication Kerberos

# 获取所有启用远程PS的用户(保留完整对象,方便后续修改属性)
$UsersWithRemotePS = Invoke-Command -Session $ExchangePSSession {
    Get-User -ResultSize Unlimited -Filter 'RemotePowerShellEnabled -eq $true'
}

# 筛选出不在管理员组的用户
$UsersNotInAdminGroups = $UsersWithRemotePS | Where-Object {
    $_.SamAccountName -notin $AdminAccounts
}

# 批量禁用非管理员用户的远程PS权限
if ($UsersNotInAdminGroups) {
    Invoke-Command -Session $ExchangePSSession -ArgumentList $UsersNotInAdminGroups.SamAccountName {
        param($UserAccounts)
        foreach ($account in $UserAccounts) {
            Set-User -Identity $account -RemotePowerShellEnabled $false
            Write-Host "已禁用用户 $account 的远程PowerShell权限"
        }
    }
}

# 清理会话
Remove-PSSession $ExchangePSSession

关键修改说明

  • 移除所有Out-String,确保变量保留数组/对象类型,让-notin能正常执行数组匹配。
  • 合并管理员组账号并去重,减少重复判断。
  • 保留Get-User返回的完整用户对象,而非仅提取账号名,方便后续直接调用Set-User修改属性。
  • 修正变量名拼写错误,确保对比逻辑指向正确的管理员账号数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:50:28