PowerShell foreach单行命令输出格式化问题求助
解决PowerShell foreach循环输出格式问题
嘿,作为PowerShell新手遇到输出格式的困扰太正常啦!我帮你调整一下命令,直接就能输出你想要的分号分隔格式,而且完全不用创建新文件~
你的原命令输出表格是因为Get-ADUser返回的是AD用户对象,PowerShell默认会把对象集合格式化成表格展示。要得到你要的字符串格式,我们需要把每个用户的属性拼接成指定字符串,再把所有字符串连起来。
直接可用的命令
(Get-Content C:\list.txt | ForEach-Object { # 获取当前用户的指定属性 $adUser = Get-ADUser $_ -Property GivenName, Surname, SamAccountName # 拼接成你要的格式:名 姓 用户名 "$($adUser.GivenName) $($adUser.Surname) $($adUser.SamAccountName)" }) -join '; '
命令解释
- 用
Get-Content读取用户列表(cat是它的别名,用Get-Content更规范) - 遍历每个用户名,通过
Get-ADUser获取对应的GivenName、Surname和SamAccountName属性 - 用PowerShell的字符串插值把三个属性拼接成你要的单个用户字符串
- 把所有用户字符串收集到数组里,最后用
-join '; '把它们连接成完整的长字符串,直接输出到控制台
进阶:处理无效用户名
如果你的list.txt里有不存在的用户名,上面的命令会报错中断。可以加个错误处理,跳过无效用户:
(Get-Content C:\list.txt | ForEach-Object { $adUser = Get-ADUser $_ -Property GivenName, Surname, SamAccountName -ErrorAction SilentlyContinue # 只处理存在的用户 if ($adUser) { "$($adUser.GivenName) $($adUser.Surname) $($adUser.SamAccountName)" } }) -join '; '
运行上面的命令,就能直接得到你想要的格式:Bob Smith SmithB; Fred Williams WilliamsF; ...
内容的提问来源于stack exchange,提问作者resayaji
相关产品推荐
相关产品推荐

