无需RSAT检查AD组成员身份:Intune推送PowerShell脚本报错咨询
报错原因
Get-ADGroupMember属于RSAT活动目录PowerShell模块的专属命令,默认仅在安装了AD管理工具的设备上可用,普通终端没有预装该模块,因此通过Intune推送给普通笔记本时会报命令不存在的错误。
无RSAT依赖的解决方案
直接调用Windows系统原生内置的System.DirectoryServices.AccountManagement .NET类即可实现AD组成员身份校验,无需安装任何额外组件,兼容所有已加入域/混合加入Azure AD的设备。
调整后的完整脚本
########################################################################################### # 创建到FMTMA-BE02的ODBC连接 ########################################################################################### $ChkFile = "C:\Windows\System32\msodbcsql17.dll" $FileExists = Test-Path $ChkFile If ($FileExists -eq $True) { # 加载.NET AD账户管理类 Add-Type -AssemblyName System.DirectoryServices.AccountManagement $context = New-Object System.DirectoryServices.AccountManagement.PrincipalContext('Domain') $user = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($context, $env:UserName) # 要校验的AD组名,可填写多个 $targetGroups = @('FM-TMASQLUserAccess') $isMember = $false foreach ($groupName in $targetGroups) { $group = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($context, $groupName) # 递归检查组成员身份,匹配原脚本-Recursive参数效果 if ($group -and $user.IsMemberOf($group)) { $isMember = $true break } } if ($isMember) { Write-Host "正在添加ODBC连接FMTMA-BE02" Add-OdbcDsn -DriverName "ODBC Driver 17 for SQL Server" -DsnType User -Name fmTMA-BE02 ` -AsJob -SetPropertyValue @("Server=FSC-TMA-BE02.edu", "Trusted_Connection=Yes", "Database=FM") } else { Write-Host "$env:UserName 不在指定AD组中" } } else { Write-Host "ODBC Driver 17 for SQL Server 未安装,请先安装对应驱动" }
注意事项
- 脚本自动识别当前域环境,无需手动指定域服务器地址
- 支持嵌套组递归查询,和原脚本的
-Recursive参数效果完全一致 - 无需预装任何管理组件,可直接通过Intune推送给所有已加入域的终端运行
内容的提问来源于stack exchange,提问作者Justin E
相关产品推荐
相关产品推荐

