如何让PowerShell提示输入参数?AD用户组查询脚本需求
实现AD用户组查询的PowerShell脚本
脚本使用前置说明
- 确保电脑已安装AD模块(域控或安装了RSAT工具的客户端默认自带)
- 若脚本无法运行,先以管理员身份打开PowerShell,执行
Set-ExecutionPolicy RemoteSigned并按提示选Y确认执行策略
方案1:带弹窗输入的脚本
运行脚本后会弹出图形化输入框,输入AD账户名即可自动查询,适合习惯可视化操作的场景:
# 加载弹窗组件 Add-Type -AssemblyName Microsoft.VisualBasic # 弹出输入框获取AD账户 $ADAccount = [Microsoft.VisualBasic.Interaction]::InputBox("请输入要查询的AD账户名", "AD用户组查询") # 空输入校验 if (-not $ADAccount) { Write-Host "未输入账户名,脚本退出" exit } # 替换成你日常要查询的安全组名称,如需每次输入可改成下方注释的弹窗代码 $ADGroup = "你的目标安全组名称" # $ADGroup = [Microsoft.VisualBasic.Interaction]::InputBox("请输入要查询的AD安全组名称", "AD用户组查询") # 执行查询并处理结果 try { $userGroups = (Get-ADUser $ADAccount -Properties MemberOf).MemberOf # 匹配目标组(不区分大小写) $matchedGroups = $userGroups | Where-Object { $_ -match [regex]::Escape($ADGroup) } if ($matchedGroups) { Write-Host "`n用户 $ADAccount 属于以下目标组:" -ForegroundColor Green # 将组DN转换为易读的组名称输出 $matchedGroups | ForEach-Object { (Get-ADGroup $_).Name } } else { Write-Host "`n用户 $ADAccount 不属于目标组 $ADGroup" -ForegroundColor Yellow } } catch { Write-Host "`n查询失败:$($_.Exception.Message)" -ForegroundColor Red }
方案2:控制台提示输入的脚本
若弹窗功能受限,用控制台交互更直接,运行脚本后在PowerShell窗口输入账户名回车即可:
# 控制台提示输入AD账户 $ADAccount = Read-Host "请输入要查询的AD账户名" # 空输入校验 if (-not $ADAccount) { Write-Host "未输入账户名,脚本退出" exit } # 替换成你日常要查询的安全组名称 $ADGroup = "你的目标安全组名称" # 执行查询并处理结果 try { $userGroups = (Get-ADUser $ADAccount -Properties MemberOf).MemberOf $matchedGroups = $userGroups | Where-Object { $_ -match [regex]::Escape($ADGroup) } if ($matchedGroups) { Write-Host "`n用户 $ADAccount 属于以下目标组:" -ForegroundColor Green $matchedGroups | ForEach-Object { (Get-ADGroup $_).Name } } else { Write-Host "`n用户 $ADAccount 不属于目标组 $ADGroup" -ForegroundColor Yellow } } catch { Write-Host "`n查询失败:$($_.Exception.Message)" -ForegroundColor Red }
优化说明
- 替换了原命令的
findstr /i,改用PowerShell原生的Where-Object + -match,语法更统一,还能自动把组的DN格式转换成易读的组名称 - 加入空输入校验和错误捕获,避免脚本因输入为空或账户不存在直接崩溃
- 结果用颜色区分,更直观
内容的提问来源于stack exchange,提问作者ch4pp
相关产品推荐
相关产品推荐

