【问题标题】:How can I extract multiple attributes of manager in AD using Powershell?如何使用 Powershell 在 AD 中提取管理器的多个属性?
【发布时间】:2021-03-22 02:30:43
【问题描述】:

我有一个用于从活动目录中提取管理器的单行 powershell 命令,但它只给了我一个属性。我该怎么做才能获得更多属性,例如姓名、sAMAccountName 和员工编号。

下面的命令只是给出了经理的员工编号。

Get-ADUser -Filter * -SearchBase "OU=Users,OU=Office365,DC=example,DC=lan" -Properties * | Select-Object name, employeeNumber, @{Name='Manager';Expression={(Get-ADUser -Property employeeNumber $_.Manager).employeeNumber}} | export-csv -path c:\temp\userexport.csv

所需的 csv 文件标题:

name    employeeNumber   ManagerName      ManagerEmployeeNumber

【问题讨论】:

  • 您可以检索多个值并将它们与分隔符连接在一起。但是,您的 CSV 中的特定 单元格 现在将有一个项目列表。
  • 您能否举例说明您希望生成的 CSV 文件的外观?
  • @MathiasR.Jessen 刚刚用所需的 csv 列更新了帖子。

标签: powershell active-directory


【解决方案1】:

如果您尝试在 CSV 文件的单个单元格中存储多个值,则必须在该单元格中创建一个分隔列表。

# Calculated property joining property values with ;
# Use try-catch because some users may not have a manager
# No manager will throw a [ParameterBindingValidationException] exception.
$ManagerProp = @{
    Name='Manager'
    Expression={
        try {
            $user = Get-ADUser $_.Manager -Properties EmployeeNumber
            "{0};{1};{2}" -f $user.Name,$user.SamAccountName,$user.EmployeeNumber
        }
        catch { }
    }
}
Get-ADUser -Filter * -SearchBase "OU=Users,OU=Office365,DC=example,DC=lan" -Properties EmployeeNumber,Manager |
    Select-Object Name,EmployeeNumber,$ManagerProp |
        Export-Csv -Path c:\temp\userexport.csv -NoType

-f 是String format operator。

请注意,使用-Properties * 效率不高,因为检索不需要的属性需要开销。


您可以为每个 Manager 属性赋予其自己的属性:

Get-ADUser -Filter * -SearchBase "OU=Users,OU=Office365,DC=example,DC=lan" -Properties EmployeeNumber,Manager |
    Foreach-Object {
        $obj = [pscustomobject]@{
            Name = $_.Name
            EmployeeNumber = $_.EmployeeNumber
            Manager_Name = ''
            Manager_SamAccountName = ''
            Manager_EmployeeNumber = ''
        }
        if ($_.Manager) {
            $Manager = Get-ADUser $_.Manager -Properties EmployeeNumber
            $obj.Manager_Name = $Manager.Name
            $obj.Manager_SamAccountName = $Manager.SamAccountName
            $obj.Manager_EmployeeNumber = $Manager.EmployeeNumber
        }
        $obj
        }
    } | Export-Csv -Path c:\temp\userexport.csv -NoType
                           

【讨论】:

  • 很好的例子和解释,这应该被标记为已解决。
  • 您好,感谢您的解释。我不想将属性存储在同一个单元格中。我基本上想要 4 列在我的 csv 文件中 - 名称、员工编号、经理姓名、经理员工编号。对不起,我不是powershell专家,只是想尽量利用它。
猜你喜欢
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多