import-csv,get-aduser,然后export-csv过滤掉不存在的AD用户

时间:2015-11-18 00:10:34

标签: csv powershell

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。我使用上面的代码失败了。任何输入都会有所帮助。

2 个答案:

答案 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

注意$ _管道输入中的区别。一个调用属性(因为它是一个属性数组),另一个调用整个变量(因为它是一个单独的条目)。

无论如何,希望有所帮助!