我有一台分配给用户的计算机,由我管理,我想获取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
可以从管道中读取,因此您需要做的就是传递所有者的专有名称。您也不需要显式指定属性Name
,SamAccountName
和UserPrincipalName
,因为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/