如何修改PowerShell脚本:保留原输入并为不存在的用户名输出NOMATCH至CSV
解决AD用户查询脚本的两个需求
下面是修改后的PowerShell脚本,可同时满足保留原始输入用户名和标记不存在用户的需求:
Import-Module ActiveDirectory # 读取用户名列表并逐个处理 $results = foreach ($originalUser in Get-Content Usernames.txt) { # 查询AD用户,抑制不存在时的错误提示 $adUser = Get-AdUser -Identity $originalUser -Properties Name, DisplayName, SamAccountName, Surname, Mail, TelephoneNumber, Department, Office, DistinguishedName, Enabled, Modified -ErrorAction SilentlyContinue # 根据查询结果构造输出对象 if ($adUser) { # 用户存在时,映射AD属性并添加原始用户名 [PSCustomObject]@{ OriginalUsername = $originalUser Name = $adUser.Name DisplayName = $adUser.DisplayName SamAccountName = $adUser.SamAccountName Surname = $adUser.Surname Mail = $adUser.Mail TelephoneNumber = $adUser.TelephoneNumber Department = $adUser.Department Office = $adUser.Office DistinguishedName = $adUser.DistinguishedName Enabled = $adUser.Enabled Modified = $adUser.Modified MatchStatus = "MATCH" } } else { # 用户不存在时,标记NOMATCH,属性字段统一标记或留空 [PSCustomObject]@{ OriginalUsername = $originalUser Name = "NOMATCH" DisplayName = "NOMATCH" SamAccountName = "NOMATCH" Surname = "NOMATCH" Mail = "NOMATCH" TelephoneNumber = "NOMATCH" Department = "NOMATCH" Office = "NOMATCH" DistinguishedName = "NOMATCH" Enabled = $null Modified = $null MatchStatus = "NOMATCH" } } } # 导出结果到CSV文件,UTF8编码避免中文乱码 $results | Export-CSV Username_To_DisplayName.csv -NoTypeInformation -Encoding UTF8
关键修改说明
- 保留原始用户名:新增
OriginalUsername字段,直接绑定循环中的输入用户名变量,确保输出始终包含原始输入内容。 - 标记不存在用户:通过
-ErrorAction SilentlyContinue屏蔽查询失败的错误,判断查询结果是否为空,为空则生成标记为NOMATCH的对象,同时新增MatchStatus字段明确匹配状态。 - 编码优化:导出时指定
-Encoding UTF8,避免中文属性出现乱码问题(可根据实际环境调整)。
内容的提问来源于stack exchange,提问作者R0tten
相关产品推荐
相关产品推荐

