PowerShell脚本需求:关联AD用户与对应计算机信息输出
PowerShell用户-计算机信息查询脚本解决方案
实现步骤
- 通过输入的真实姓名匹配AD用户,提取
SamAccountName和UserPrincipalName - 生成两种登录名格式(新用户
firstlastname、老用户companyname-initials) - 查询AD中描述字段包含任一登录名的计算机
- 将用户与对应计算机信息合并,以表格形式输出
完整脚本
# 导入AD模块(需先安装RSAT工具) Import-Module ActiveDirectory # 获取用户输入的真实姓名 $realName = Read-Host "请输入用户真实姓名" # 查询AD中匹配姓名的用户 $adUser = Get-ADUser -Filter {Name -like "*$realName*"} -Properties SamAccountName, UserPrincipalName if (-not $adUser) { Write-Host "未找到匹配的AD用户" exit } # 生成新用户登录名格式(名+姓全小写,示例:张三→zhangsan,John Doe→johndoe) $nameParts = $adUser.Name -split " " $newLoginFormat = ($nameParts[0].ToLower() + $nameParts[1].ToLower()) # 生成老用户登录名格式(公司名-姓名首字母大写,示例:contoso-ZS,contoso-JD) $companyName = "contoso" # 替换为你的实际公司名称 $initials = ($nameParts | ForEach-Object { $_.Substring(0,1).ToUpper() }) -join "" $oldLoginFormat = "$companyName-$initials" # 查询描述包含任一登录名的AD计算机 $matchedComputers = Get-ADComputer -Filter {Description -like "*$newLoginFormat*" -or Description -like "*$oldLoginFormat*"} -Properties Description # 整理输出数据 $output = @() foreach ($user in $adUser) { if ($matchedComputers) { foreach ($computer in $matchedComputers) { $output += [PSCustomObject]@{ "真实姓名" = $user.Name "SamAccountName" = $user.SamAccountName "UserPrincipalName" = $user.UserPrincipalName "计算机名" = $computer.Name "计算机描述" = $computer.Description } } } else { # 无匹配计算机时也输出用户信息 $output += [PSCustomObject]@{ "真实姓名" = $user.Name "SamAccountName" = $user.SamAccountName "UserPrincipalName" = $user.UserPrincipalName "计算机名" = "未匹配到" "计算机描述" = "无" } } } # 输出格式化表格 $output | Format-Table -AutoSize # 可选:导出到CSV文件 # $output | Export-Csv -Path "用户计算机信息.csv" -Encoding UTF8 -NoTypeInformation
注意事项
- 必须先安装RSAT Active Directory PowerShell模块,管理员权限下执行
Install-WindowsFeature RSAT-AD-PowerShell即可安装 - 务必把脚本中的
$companyName替换成你公司的实际名称 - 姓名拆分逻辑需根据实际姓名格式调整:如果是中文姓名(姓在前名在后),可能需要调换
$nameParts[0]和$nameParts[1]的顺序 - 如果同一姓名匹配多个AD用户,脚本会自动遍历所有用户并查询对应计算机
内容的提问来源于stack exchange,提问作者Skunk
相关产品推荐
相关产品推荐

