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
请注意,在$ _管道输入的区别。一个调用一个属性(因为它是一个属性数组),另一个只是调用整个变量(因为它是一个单独的条目)。
无论如何,希望有所帮助!
我已经重新格式化了您的代码,而不改变其含义。我认为你可能有不正确的复制/粘贴。
ForEach-Object
需要[ScriptBlock]
(由大括号{ }
表示):
已经使用了括号(
没有关闭一个)
。
你应该有:
ForEach-Object { Get-ADUser $_.Username -Properties displayname }
所以你认为这将完成我想要的CSV数据? – TheJanitor
@TheJanitor说实话我不确定,一旦我看到语法错误,我很快回答了这个问题。它看起来像[麦肯宁的答案](http://stackoverflow.com/a/33771085/3905079)更好地研究你的最终目标。 – briantist
太好了,谢谢麦肯宁。正确我只有仅关注我的用户名列。如果你想修改它只是“用户名”列,这将是有益的。我还有其他的LastWrite和LastAccess属性,以防万一我需要它。我很感谢你的麦肯宁的投入。代码看起来不错。我会在早上尽快测试。 – TheJanitor
这工作麦肯宁。我今天早上测试了第一件东西,效果非常好。现在到我家的文件夹复制项目的下一个阶段:)谢谢Brian和McK。 – TheJanitor