首页 > 解决方案 > Powershell 导出到 csv(保持数据的原始顺序)

问题描述

我有以下脚本可以根据用户的姓名导出用户的 samaccountname。它正在工作/做它应该做的事情。

$users = Get-Content C:\Users\metho\Desktop\users1.txt

$output = foreach ($user in $users){
Get-ADUser -Filter "Name -eq '$user'" | Select-Object name, samaccountname
} 

$output | export-csv C:\Users\metho\Desktop\Users_Export_Test.csv -NoTypeInformation

原始 csv 包含 527 个用户...输出 csv 有 480 个用户。基本上,未找到的用户在输出 csv 中被跳过(但我希望输出也以相同的顺序列出丢失的用户),这给我带来了一个问题。我想要一个输出 CSV,其中还列出了不在系统上的用户,因此我可以进行手动挖掘,目前我必须通过将原始 csv 与导出的 csv 进行比较来自己找到丢失的用户,即时间太长了。

有没有一种方法可以使用找到的用户名导出 csv 并列出在系统上找到的用户。我认为它必须与 export-csv 开关有关。我正在尽我所能找到答案,也许有人知道答案??任何帮助都将受到高度评价。

-方法

标签: powershellcsv

解决方案


你可以尝试这样的事情:

$users = Get-Content C:\Users\metho\Desktop\users1.txt

$output = @()
foreach ($user in $users) {
    $adUser = Get-ADUser -Filter "Name -eq '$user'" | Select-Object Name, SamAccountName
    if ($adUser) {
        $output += $adUser
    }
    else {
        $output += [PSCustomObject]@{
            Name           = $user
            SamAccountName = 'Not found in AD'
        }
    }
} 

$output | Export-Csv C:\Users\metho\Desktop\Users_Export_Test.csv -NoTypeInformation

如果在 AD 中找不到用户,则该用户的输出将是

"Name","SamAccountName"
"Username as in the txt file","Not found in AD"

推荐阅读