【问题标题】:How to get more data from Get-ADuser with powershell如何使用 Powershell 从 Get-ADuser 获取更多数据
【发布时间】:2017-05-13 04:58:22
【问题描述】:
Import-Module ActiveDirectory
Get-ADUser -SearchBase "OU=CompanySite,DC=example,DC=domain,DC=com" -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties "SamAccountName","msDS-UserPasswordExpiryTimeComputed", "Department", "Title", "Manager" | 
  Select-Object -Property "SamAccountName", @{Name="Password Expiry Date"; Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}; @{Label="Manager";Expression={(Get-aduser -filter {sAMAccountName -eq $_.Manager}.sAMAaccountName)}};# |
     Export-Csv "C:\Update\PasswordExpired.csv" -NoTypeInformation

我正在尝试获取包含密码即将到期的员工的 CSV,并获取他们的经理姓名、员工职位、员工姓名和密码到期日期。

但是,当我运行它时,我得到了员工的姓名和密码到期的日期。没有其他字段。我不明白我哪里出错了

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    好的,有一些错误导致问题:

    1. 在选择对象部分的密码到期日期属性后面有一个分号 (;)。这导致代码在该点终止。应该是逗号。
    2. 对于 Manager 属性,您的表达式不正确。 SamAccountName 后面有括号。它应该在期间之前。此外,您正在尝试将 DN 与 SamAccountName 数据匹配,因此它不会返回任何内容。只需执行 Get-ADUser 并将标识设置为 $_.Manager 输出。从那里,您可以使用括号从管理器的完整 ADUser 对象中输出您想要的任何元数据。您可以将 SamAccountName 换成 DisplayName 或其他名称。

      Your code:    (Get-ADUser -filter {SamAccountName-eq $_.Manager}.SamAccountName)
      Correct code: (Get-ADUser $_.Manager).SamAccountName
      
    3. Title 和 Name 不包括在内,因为您没有在 Select-object 代码中调用它们。 Get-ADUser 的“-Properties”部分仅将该属性添加到检索到的属性列表中。您在 Select 中设置的就是输出到屏幕或文件的内容。

    4. 您在 Export-CSV 部分之前有一个注释 (#) 标签,因此它也没有运行。

    这是代码。我的 AD 中没有 manager 属性,所以我无法验证该部分,但其余部分运行正确。我还让它更便于携带。 SearchBase 现在在变量中指定,文件的导出位置也是如此。此外,您无需在 -Properties 部分中指定 SamAccountName,因为这是 Get-ADUser 的默认属性。

        Import-Module ActiveDirectory
        $SearchPath = "OU=CompanySite,DC=example,DC=domain,DC=com"
        $ExportPath = 'C:\Update\PasswordExpired.csv'
    
        $Users = Get-ADUser -SearchBase $SearchPath -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties "msDS-UserPasswordExpiryTimeComputed", "Department", "Title", "Manager" 
        $Users | Select-Object -Property Name,"SamAccountName",Title,@{Name="Password Expiry Date"; Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}},@{Label="Manager";Expression={(Get-ADUser $_.Manager).sAMaccountName}} | Export-Csv $ExportPath -NoTypeInformation
    

    【讨论】:

    • 我们为 AD 中的用户设置了管理员,但该字段未填充 o 导出
    • 好的,我已经更新了代码。没有经理数据,我没有意识到出了什么问题。这是你所拥有的与更正的对比。您的代码:(Get-ADUser -filter {SamAccountName-eq $_.Manager}.SamaAccountName) #注意您的 SamAccountName 拼写错误 正确的代码:(Get-ADUser $_.Manager).sAMaccountName 经理代码提供经理的 DN .您可以使用 $_.Manager 值执行 get-aduser,然后获得完整的 AD 用户对象,然后您可以选择获取 SamAccountName 或 DisplayName 或任何您想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2021-10-24
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多