Import-Csv C:\username.csv |
ForEach-Object (Get-ADUser $_.Username -Properties displayname |
Export-Csv C:\usernames.csv
我有一个带有一堆homefolders的旧文件服务器(2k3)。我为目录导出了一个带get-childitem
的csv。我打算使用文件夹的名称(镜像到AD用户名)来查询AD Get-ADUser
。如果AD用户不存在,则过滤掉那些不存在的用户,并export-csv
" active"广告用户。然后,导出的CSV将在我的脚本中用于迁移" active" homefolders到新的homefolder VM。我使用上面的代码失败了。任何输入都会有所帮助。
答案 0 :(得分:2)
我重新格式化了你的代码,没有改变含义。我想你可能错误地复制/粘贴了。
ForEach-Object
需要[ScriptBlock]
(用花括号{ }
表示):
您使用了括号(
而没有结束)
。
你应该:
ForEach-Object { Get-ADUser $_.Username -Properties displayname }
答案 1 :(得分:1)
briantist对花括号是正确的。
要稍微扩展一下他的回答,您还希望在Export-CSV语句中包含-NoType参数,以便生成的CSV在顶部没有类型行。这样可以更轻松地使用Excel进行操作并提供给其他PowerShell脚本!
我已经把它们整理在一起了。
Import-Csv C:\username.csv | ForEach-Object {Get-ADUser $_.Username -Properties displayname} | Export-Csv C:\usernames.csv -Notype
我在Windows 2012 R2的测试实验室中按预期进行了测试。
另外一个问题:如果你的目标是获得一个"活跃的" AD用户只能迁移所需的文件夹,那么您是否希望导出所有信息?听起来你只需要用户名。请告诉我,我可以为您调整代码。
修改强> 以下是修改后的代码,用于从CSV文件中获取有效的用户名列表作为导入。我还包括代码,只使用一个用户名列表作为输入,以防你最终使用它。
将原始CSV文件作为输入:
Import-CSV C:\username.csv | ForEach-Object {Get-ADUser $_.username -Properties *} | select -expand SAMAccountName | Out-File C:\usernames.txt
只有一个用户名列表作为输入:
Get-Content C:\username.txt | ForEach-Object {Get-ADUser $_ -Properties *} | select -expand SAMAccountName | Out-File C:\usernames.txt
注意$ _管道输入中的区别。一个调用属性(因为它是一个属性数组),另一个调用整个变量(因为它是一个单独的条目)。
无论如何,希望有所帮助!