下面是我用来查找用户创建日期和上次登录日期的代码,然后将其写入.csv文件。
$users=Get-ADuser -SearchBase "OU=testou1,dc=US,dc=ITOPS,dc=COM" -Filter * -properties samaccountname,lastlogondate,Created
$forloop = foreach($user in $users) {
echo $user.samaccountname
echo $user.created
echo $user.lastlogondate
}
$forloop | Out-file c:\bin\exporting.csv -Append
此代码在新行上打印每个项目,如下所示:
username
created date
last logon date
但我希望所有这些都在不同列的同一行:
username createdDate lastLogonDate
答案 0 :(得分:2)
您知道PowerShell中的echo
实际上是Write-Output
的别名。
PS Z:\> get-alias echo
CommandType Name ModuleName
----------- ---- ----------
Alias echo -> Write-Output
如果您查看TechNet文章,它本身不支持任何追加类型参数或换行抑制。这并不意味着你无法做到。只是没有任何帮助。
echo
/ Write-Output
只是将数据发送到输出流。你需要你的文字吗?有没有一个更好的例子可以提供你想要完成的事情?仅供参考,在幕后工作的其他cmdlet也在使用Out-Default
Write-Host
真的是你想要的。是的我知道你说你不想要它,但我希望你能肯定地看到它。
PS Z:\> Write-host "Hai" -NoNewline; Write-Host "Hello"
HaiHello
答案 1 :(得分:0)
我冒昧地使用一些PowerShell功能来输出我认为您实际需要的数据。我将属性放入自定义对象,并将输出留给脚本的末尾。在重构脚本时,这将使代码重用变得更容易。我还使用本机CmdLet以适当的格式导出CSV。你实际上并不需要使用$ forloop变量,因为foreach会将所有对象放入管道中,但是我把它留在了,因为它可以使事情更具可读性。
$users=Get-ADuser -SearchBase "OU=testou1,dc=US,dc=ITOPS,dc=COM" -Filter * -properties samaccountname,lastlogondate,Created
$forloop = foreach($user in $users) {
[pscustomobject]@{
samaccountname=$user.samaccountname;
created=$user.created;
lastlogondate=$user.lastlogondate
}
}
$forloop | Export-Csv -Path c:\bin\exporting.csv
答案 2 :(得分:0)
我会创建一个具有名称和值属性的对象数组。这将很好地导出到CSV。
请记住我在手机上写这个,我稍后会在我的ISE中查看它,但我已经修改了下面的代码:
$users=Get-ADuser -SearchBase "OU=testou1,dc=US,dc=ITOPS,dc=COM" -Filter * -properties samaccountname,lastlogondate,Created
$array = @() #declare the array outside the loop
$forloop = foreach($user in $users) {
$arrayrow = New-Object System.Object
$arrayrow | Add-Member -type NoteProperty -name User -value $user.samaccountname
$arrayrow | Add-Member -type NoteProperty -name Created -value $user.created
$arrayrow | Add-Member -type NoteProperty -name LastLogonDate -value $user.lastlogondate
$array += $arrayrow
}
$array | export-csv -notype c:\bin\exporting.csv