我有一个导入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
来完成。
答案 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文件已经包含SamAccountName
,EmailAddress
和Password
列,因此我们只是通过管道发送这些列。