【问题标题】:Get AD User info using PowerShell使用 PowerShell 获取 AD 用户信息
【发布时间】:2016-01-29 17:17:14
【问题描述】:

我正在尝试使用 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[]”转换为参数“ExpandProperty”所需的类型“System.String”。不支持指定的方法。 在行:4 字符: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

谁能指出问题出在哪里?任何其他建议也将受到欢迎。非常感谢!

【问题讨论】:

    标签: powershell attributes


    【解决方案1】:

    您不需要对这些属性使用 -ExpandObject,它们都是简单的类型,如字符串和日期时间。 -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
    

    【讨论】:

      【解决方案2】:

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

      $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
      

      【讨论】:

        【解决方案3】:

        您只能为开关 -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
        

        【讨论】:

        • 非常感谢你们俩。最后一个问题:如何将这些数据导出到 Excel 中?我尝试了 Export-CSV,但它在文件中生成的数据都是乱码,与 PowerShell 中出现的数据完全不同。再次感谢!
        • @user1013264 - 我已经更新了我的帖子尝试让我知道
        • 谢谢。导出部分出现此错误:Export-Csv:找不到驱动器。名为“Export-Csv C”的驱动器不存在。在 line:9 char:95 + ... rdchangeflag | Export-Csv -Path "Export-Csv C:\Project\ELI.csv" -NoTypeInformati ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Export-Csv C: String) [Export-Csv], DriveNotFoundException + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.ExportCsvCommand
        • 在错误中查找您在 -Path 开关之后放置的路径是 "-Path "Export-Csv C:\Project\ELI.csv"
        猜你喜欢
        • 2020-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        • 2022-01-19
        相关资源
        最近更新 更多