我尝试使用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
是否有人能指出问题所在?任何其他建议也将受到欢迎。非常感谢你!
答案 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