json - 如何通过Powershell AD计算机所有者属性(如电子邮件和帐户名)获取?

标签 json powershell active-directory

我有一台分配给用户的计算机,由我管理,我想获取JSON格式的列表,其中主机名是键,用户属性是值。

但是我坚持将其放在一个命令:/中,并将其放在json中,因此请使用csv一段时间。

我成功运行了以下两个命令:

  • Get-ADComputer -Filter * -property managedby | select name, managedby > C:\Windows\Temp\computerowners.csv
  • Get-ADUser -Filter * -SearchBase 'CN=My User,DC=example,DC=com' -Properties SamAccountName | Format-Table -Property Name, samaccountname, userprincipalname -AutoSize

  • 搜索库由第一个值开始管理。

    我希望有这样的输出:
    主机名,名称,samaccountname,userprincipalname

    我尝试将上述2条命令组合在一起:
    Get-ADComputer -Filter * -property managedby | foreach {get-aduser -Filter * -SearchBase $managedby -Properties name, samaccountname, userprincipalname} | select name, samaccountname, userprincipalname > C:\Windows\Temp\computerowners.csv
    

    但是它想要工作-正如我所理解的那样不正确地进行管理...将其保存在json中的任何帮助都将受到欢迎。

    最佳答案

    您没有定义在$managedby循环中使用的ForEach-Object变量,因此该变量是$null。您需要在管道中使用当前对象的属性ManagedBy($_.ManagedBy)。

    话虽如此,您正在使整个过程变得比所需复杂。如果允许,PowerShell可以为您完成很多繁重的工作。 Get-ADUser可以从管道中读取,因此您需要做的就是传递所有者的专有名称。您也不需要显式指定属性NameSamAccountNameUserPrincipalName,因为Get-ADUser默认会返回它们。另外,由于仍然要输出CSV,因此请使用Export-Csv而不是重定向操作符。

    Get-ADComputer -Filter * -Property managedby |
      Select-Object -Expand ManagedBy |
      Get-ADUser |
      Select-Object Name, SamAccountName, UserPrincipalName |
      Export-Csv C:\Windows\Temp\computerowners.csv -NoType
    

    要在输出中包含计算机名,请按以下步骤调整上面的代码:
    Get-ADComputer -Filter * -Property managedby |
      ForEach-Object {
        $computer = $_.Name
        if ($_.ManagedBy) { Get-ADUser $_.ManagedBy } else { '' }
      } |
      Select-Object @{n='ComputerName';e={$computer}}, Name, SamAccountName,
                    UserPrincipalName |
      Export-Csv C:\Windows\Temp\computerowners.csv -NoType
    

    但是,要获得可以使用计算机名作为嵌套用户属性的键导出为JSON的数据结构,一种不同的方法会更优雅。使用计算机名作为关键字,在哈希表中收集所有相关的用户属性:
    $computers = @{}
    Get-ADComputer -Filter * -Property managedby | ForEach-Object {
      $computers[$_.Name] = if ($_.ManagedBy) {
        Get-ADUser $_.ManagedBy | Select-Object Name, SamAccountName, UserPrincipalName
      } else {
        New-Object -Type PSObject -Property @{
          Name              = ''
          SamAccountName    = ''
          UserPrincipalName = ''
        }
      }
    }
    

    然后从该哈希表创建一个对象并将其转换为JSON:
    New-Object -Type PSObject -Property $computers | ConvertTo-Json
    

    关于json - 如何通过Powershell AD计算机所有者属性(如电子邮件和帐户名)获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41399120/

    相关文章:

    string - 如何在Lift中将JSON JString值转换为普通String?

    php - JavaScript 中的 JSON 评估

    javascript - Backbone Fetch 中的模拟 JSON 响应?

    javascript - 如何将数据从 WebAPI 方法流式传输到 JavaScript 客户端

    powershell - 如何使用 Powershell 中的 Edge Selenium webdriver 检查窗口是否最小化

    powershell - 以原子方式运行 powershell 命令

    active-directory - 使用 UnboundID 添加组条目时不会执行错误 503

    Powershell:未填充参数/参数

    java - Coldfusion.security.NTAuthentication : Error in locating groups for user XXX in domain XXX

    active-directory - 从命令行使用 ldapsearch 查询 Windows Active Directory 服务器