gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:35:32 27 4
gpt4 key购买 nike

我有一台分配给用户的计算机,由我管理,我想获取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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com