使用PowerShell获取AD用户信息

时间:2015-10-29 14:02:18

标签: powershell attributes

我尝试使用PowerShell获取一堆Active Directory属性以获取用户列表。我将用户列表导入变量,然后使用ForEach循环遍历每个用户。这是目前脚本的样子:

$Users=Get-Content "C:\Project\NewUSers\FirstBatch.txt"
$UserInfo = foreach($User in $Users) 
{
  Get-ADUser $User -properties DisplayName,PasswordLastSet,whencreated | Select-Object -ExpandProperty DisplayName,PasswordLastSet,WhenCreated
}
$UserInfo

但是,当我运行脚本时,收到以下错误消息:

  

Select-Object:无法转换' System.Object []'到#System; System.String'参数' ExpandProperty'需要。不支持指定的方法。   在行:4 char:104   + ... ExpandProperty DisplayName,PasswordLastSet   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidArgument:(:) [Select-Object],ParameterBindingException       + FullyQualifiedErrorId:CannotConvertArgument,Microsoft.PowerShell.Commands.SelectObjectCommand

当我只检索信号属性时,脚本会运行。因此,如果我要将代码更改为此代码,它将会工作并为我提供这些属性的值:

Get-ADUser $User -properties DisplayName,PasswordLastSet,whencreated | Select-Object -ExpandProperty PasswordLastSet

是否有人能指出问题所在?任何其他建议也将受到欢迎。非常感谢你!

3 个答案:

答案 0 :(得分:0)

您无法展开多个属性,您可以创建一个数组并将这些信息添加到其中,如下所示:

$Array = @() ## this array will hold all the data
$Users=Get-Content "C:\Project\NewUSers\FirstBatch.txt"

foreach($User in $Users) 
{
  $User = Get-ADUser $User -properties DisplayName,PasswordLastSet,whencreated 
  $Result = "" | Select DisplayName,PasswordLastSet,WhenCreated ## this will create a single user data object
  $Result.DisplayName = $User.DisplayName
  $Result.PasswordLastSet = $User.PasswordLastSet
  $Result.WhenCreated = $User.WhenCreated
  $Array += $Result ## this will add the single user data into the array
}

$Array

答案 1 :(得分:0)

您只能为交换机-ExpandProperty设置单个对象或数组。对于指定的参数(DisplayName,PasswordLastSet,WhenCreated),您不需要指定ExpandProperty开关,因为它们是单值属性。

运行您的代码,但没有ExpandProperty:

 $Users=Get-Content "C:\Project\NewUSers\FirstBatch.txt"
$array = @()
foreach($User in $Users) 
{
  $aduser = Get-ADUser $User -properties DisplayName,PasswordLastSet,whencreated 
  $array += $aduser
}

$array| select DisplayName,PasswordLastSet,whencreated |export-csv -Path "C:\Project\NewUSers\users.csv" -NoTypeInformation

答案 2 :(得分:0)

您不需要对这些属性使用-ExpandObject,它们都是简单类型,如string和datetime。 -ExpandObject用于显示对象的所有属性或将数组的内容转换为字符串。

https://technet.microsoft.com/en-us/library/hh849895.aspx

与powershell一样,有很多方法可以达到相同的结果,下面的示例将达到预期的效果。

  

使用管道

$Users=Get-Content "C:\Project\NewUSers\FirstBatch.txt"
$UserInfo = $Users | foreach-object {Get-ADUser $_ -properties DisplayName,PasswordLastSet,whencreated} | Select DisplayName, PasswordLastSet, WhenCreated
$UserInfo
  

使用标准迭代

$Users = Get-Content "C:\Project\NewUSers\FirstBatch.txt"
$UserInfo = foreach($User in $Users) 
{
  Get-ADUser $User -properties DisplayName,PasswordLastSet,whencreated | Select-Object DisplayName,PasswordLastSet,WhenCreated
}
$UserInfo