export-csv在out-file成功的地方失败了?

时间:2015-09-29 16:39:49

标签: powershell

我不明白为什么我没有从

获取csv的数据
$users=gc C:\0NIX\03SCRIPTS\TMP\OCH\old_users.txt
foreach ($user in $users)
{
get-aduser -identity $user -pr * | Select-Object name, samaccountname, telephonenumber |export-csv C:\0NIX\03SCRIPTS\TMP\1.csv -notype
}

当我破坏下面的内容时,使用out-file -append,它确实有数据

$users=gc C:\0NIX\03SCRIPTS\TMP\OCH\old_users.txt
foreach ($user in $users)
{
get-aduser -identity $user -pr * | Select-Object name, samaccountname, telephonenumber |out-file -append C:\0NIX\03SCRIPTS\TMP\1.txt 
}

1 个答案:

答案 0 :(得分:1)

您未在-Append示例中使用export-csv。我猜你用坏数据覆盖它(据说我原本期望你的输出文件中有一个结果)。请考虑以下示例,该示例简化整个流程并使用管道,以便不需要-Append

Get-Content "C:\0NIX\03SCRIPTS\TMP\OCH\old_users.txt" | ForEach-Object{ 
    get-aduser -identity $_ -Properties telephonenumber | Select-Object name, samaccountname, telephonenumber
} | Export-Csv C:\0NIX\03SCRIPTS\TMP\1.csv -NoTypeInformation

我也想知道你是否在压制错误?检查通常为“继续”的$ErrorActionPreference的结果

如果找不到匹配的用户,

Get-Aduser将不返回任何对象。我认为当没有产品时,你会期待空白输出。您需要在逻辑中进行一些错误检测以解决这些问题。不是唯一的方法,但我们让用户进入变量$result。如果数据存在则沿管道传递。如果不是,我们也会创建一个空条目。

Get-Content "C:\0NIX\03SCRIPTS\TMP\OCH\old_users.txt" | ForEach-Object{ 
    $result = get-aduser -identity $_ -Properties telephonenumber -ErrorAction SilentlyContinue
    If($result){
        $result | Select-Object name, samaccountname, telephonenumber
    } Else {
        New-Object -TypeName Psobject -Property @{
            Name = $_
            samaccountname = ""
            telephonenumber = ""
        }
    }

} | Export-Csv C:\0NIX\03SCRIPTS\TMP\1.csv -NoTypeInformation