在PowerShell中导出对象

时间:2016-04-05 18:42:21

标签: csv powershell

我有一个导入CSV的脚本,将列表与AD进行比较并创建用户名和密码。脚本开头是这样的:

Titanium.UI.iPhone.TableViewStyle.GROUPED

$CSV = Import-CSV C:\Scripts\Add_AD_Users.csv $CSV | ForEach-Object{ if(user does exist){ # skip it } elseif(user doesn't exist){ # create user and export password, email, and username to csv. } 声明中,我想获取当前的elseif"对象"并将其导出为CSV。那可能吗? CSV包含3个标题我想要ForEach-object

有没有办法做到这一点,所以我只有新创建的用户?这不能通过$_.SamAccountName $_.EmailAddress $_.Password上的-PassThru来完成。

2 个答案:

答案 0 :(得分:0)

最快的方法是使用哈希表与PSCustomObject创建加速器结合使用。

$userToExport = [PSCustomObject]@{
    'sAMAccountName'=$_.SamAccountName
    'Email Address'=$_.EmailAddress
    'Password'=$_.Password
     # Each element in '' will be the column header, in order declared.
}

$userToExport | Export-CSV .\absolutefilepath.csv -Append -NoTypeInformation

-NoTypeInformation将对象类型从对象中剥离,因此它不会在CSV中打印出来。 -Append将格式化CSV(如果为空),并将当前添加的用户添加到csv,即使它是之前创建的。

答案 1 :(得分:0)

这不是非常漂亮,但我会将其放入where子句中,然后使用Select-Object输出到CSV。

$CSV | 
    Where-Object{$result=try{Get-ADUser $_.samaccountname}catch{$false};!$result} |
    Select-Object SamAccountName, EmailAddress, Password | 
    Export-Csv -NoTypeInformation $path

由于您没有处理存在的用户,因此可以使用Where-Object进行测试,因此他们不会继续管道。 Unfortunately you cannot use -ErorrAction哪个更好,所以我们测试try catch块的结果。

从中看来,您的CSV文件已经包含SamAccountNameEmailAddressPassword列,因此我们只是通过管道发送这些列。