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

问题描述:

Import-Csv C:\username.csv | 
ForEach-Object (Get-ADUser $_.Username -Properties displayname | 
Export-Csv C:\usernames.csv 

我有一个旧的文件服务器(2k3)与一堆homefolders。我为目录导出了一个带有get-childitem的csv。我打算使用镜像到AD用户名的文件夹的名称,用Get-ADUser来查询AD。如果AD用户不存在,请过滤掉那些不存在的用户和“有效”广告用户。然后,导出的CSV将用于我的脚本中,以将“活动”主文件夹迁移到新的主文件夹虚拟机。我已经使用上面的代码不成功。任何输入都会有帮助。import-csv,get-aduser,然后export-csv过滤掉不存在的AD用户

briantist是关于大括号正确。

要在他的答案上稍微扩展一点,您还需要将-NoType参数包括到Export-CSV语句中,以便生成的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 

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

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

+0

太好了,谢谢麦肯宁。正确我只有仅关注我的用户名列。如果你想修改它只是“用户名”列,这将是有益的。我还有其他的LastWrite和LastAccess属性,以防万一我需要它。我很感谢你的麦肯宁的投入。代码看起来不错。我会在早上尽快测试。 – TheJanitor

+1

这工作麦肯宁。我今天早上测试了第一件东西,效果非常好。现在到我家的文件夹复制项目的下一个阶段:)谢谢Brian和McK。 – TheJanitor

我已经重新格式化了您的代码,而不改变其含义。我认为你可能有不正确的复制/粘贴。

ForEach-Object需要[ScriptBlock](由大括号{ }表示):

已经使用了括号(没有关闭一个)

你应该有:

ForEach-Object { Get-ADUser $_.Username -Properties displayname } 
+0

所以你认为这将完成我想要的CSV数据? – TheJanitor

+0

@TheJanitor说实话我不确定,一旦我看到语法错误,我很快回答了这个问题。它看起来像[麦肯宁的答案](http://stackoverflow.com/a/33771085/3905079)更好地研究你的最终目标。 – briantist