在导出CSV之前过滤对象数据

时间:2019-02-14 15:53:48

标签: powershell

我正在研究一个Powershell脚本,该脚本通过我们的广告验证CSV,找到当前已禁用的帐户列表,然后将其导出到另一个CSV。我目前能够读取CSV,比较并导出所有带有有关状态的正确/错误标志的帐户的列表。我还可以使用其他脚本过滤输出的CSV。理想情况下,我想将这些合并为一个仅包含一个输出CSV的脚本。我只是不确定该怎么做。

我尝试将脚本2的“ where ...”部分移至脚本1中,但没有成功。

脚本1:

Import-Csv C:\ServerScripts\Compare\students.csv | ForEach-Object {
New-Object -TypeName PSCustomObject -Property @{
    samaccountname = $_.samaccountname
    firstname = $_.firstname
    lastname = $_.lastname
    name = $_.name
    password = $_.password
    email = $_.email
    description = $_.description
    CAMPUS_ID = $_.CAMPUS_ID
    exist = [bool]($account=([adsisearcher]"(samaccountname=$($_.samaccountname))").findone())
    disabled = [bool]($account.properties.useraccountcontrol[0] -band 2)
}
} | Export-Csv C:\ServerScripts\Compare\output.csv -NoTypeInformation

脚本2:

Import-Csv C:\ServerScripts\Compare\output.csv | where {$_.disabled -ne "FALSE"} | Export-Csv C:\ServerScripts\Compare\disabled.csv -notypeinfo

两个脚本都是独立工作的,我只需要一种将它们组合在一起的方法。

1 个答案:

答案 0 :(得分:1)

在调用Export-Csv之前将支票添加到第一个管道中:

Import-Csv C:\ServerScripts\Compare\students.csv | ForEach-Object {
New-Object -TypeName PSCustomObject -Property @{
    samaccountname = $_.samaccountname
    firstname = $_.firstname
    lastname = $_.lastname
    name = $_.name
    password = $_.password
    email = $_.email
    description = $_.description
    CAMPUS_ID = $_.CAMPUS_ID
    exist = [bool]($account=([adsisearcher]"(samaccountname=$($_.samaccountname))").findone())
    disabled = [bool]($account.properties.useraccountcontrol[0] -band 2)
}
} |Where-Object {$_.disabled -eq $true} | Export-Csv C:\ServerScripts\Compare\output.csv -NoTypeInformation