使用PowerShell通过AD获取用户名

问题描述:

我一直对此感到头痛,并无法弄清楚为什么这不起作用。 使用PowerShell通过AD获取用户名

Import-Module ActiveDirectory 
 
$Users = Get-ADGroupMember -identity “Accounting” -recursive | select name | export-csv -path "D:\group.csv" 
 
$csv = Import-Csv "D:\group.csv" 
 
foreach ($user in $csv) {Get-ADUser -filter "'Name -eq ""$user""'"}

+0

您收到了错误消息。你应该在你的帖子中包含这些内容以帮助那些试图帮助你的人。 – alroc 2014-09-23 15:43:15

$user是在CSV文件一行。您需要解决该行的Name字段(您也有太多的单引号和双引号)。

foreach ($user in $csv) {Get-ADUser -filter "Name -eq '$($user.name)'"} 

或者你可以让CSV文件只是名称的香草上市,而不是它读成CSV:

Get-ADGroupMember -identity “Accounting” -recursive | select -expandproperty name | out-file "c:\group.txt" 

$csv = get-content -path "c:\group.txt" 
foreach ($user in $csv) {Get-ADUser -filter "Name -eq '$user'"} 

但是如果你只使用该文件作为组之间的管道搜索和用户查找,您可以直接将Get-ADGroupMember的输出直接输入到Get-ADUser,从而完全跳过该选项。

Get-ADGroupMember -identity “Accounting” -recursive | Get-ADUser; 
+0

''$ user''仍然可以用单引号包装吗? – Matt 2014-09-23 15:44:52

+0

是的。 * outer *双引号触发变量扩展,并且过滤器接受用单引号括起来的字符串。运行它并自己看看。 'Filter'成为'Name -eq'myusernamehere'' – alroc 2014-09-23 15:47:17

你在这里有几个问题,我认为。

  1. 导出数据只是为了再次导入它。你甚至需要第二个数据副本吗?
  2. Import-Csv将不仅返回对象数组的名称。还有就是要解决这个问题的方法不止一种,但是这应该是更多,你在找什么

Import-Module ActiveDirectory 
$Users = Get-ADGroupMember -identity “Accounting” -recursive | select name 
foreach ($user in $Users) {Get-ADUser -filter {Name -eq $user.Name}} 

即使是超过它需要。它的冗余自Get-ADGroupMember已经返回您需要的类似对象。你需要怎样处理这些数据?如果您确实需要Get-AdUser,那么只需将输出传送给它。

Get-ADGroupMember -identity “Accounting” -recursive | Get-Aduser 
+0

就过滤花括号而言,'-Filter'参数实际上需要一个字符串,所以使用引号是获得过滤器工作的更一致的方式。 – Kohlbrr 2014-09-23 15:52:03

+0

@Kohlbrr很高兴知道谢谢。删除了-Filter的关注 – Matt 2014-09-23 16:11:18