Powershell 如何以正确的方式从get ADUser获取所有字段?
我有以下代码(或多或少) 现在,当您检查每个对象的属性计数时,它将是不同的。在我的测试域中,每个对象的属性范围从103到147 现在,虽然我可以将该计数添加到数组中,但排序如下(或多或少) 并从属性计数最高的属性中获取最大值和所有名称属性,然后在此基础上构建我的Excel/Word/SQL对象。。但有:Powershell 如何以正确的方式从get ADUser获取所有字段?,powershell,active-directory,Powershell,Active Directory,我有以下代码(或多或少) 现在,当您检查每个对象的属性计数时,它将是不同的。在我的测试域中,每个对象的属性范围从103到147 现在,虽然我可以将该计数添加到数组中,但排序如下(或多或少) 并从属性计数最高的属性中获取最大值和所有名称属性,然后在此基础上构建我的Excel/Word/SQL对象。。但有: 属性数最高的对象可能与属性数最低的对象不具有相同的属性 巨大的性能损失(我知道要求所有字段无论如何都是性能损失) 还有其他方法可以得到正确的结果吗?如果您想知道为什么我可能需要这样做,请考虑创建
还有其他方法可以得到正确的结果吗?如果您想知道为什么我可能需要这样做,请考虑创建SQL表,该表需要在插入行之前定义所有字段。或者Excel工作簿,它将以页眉(必须知道页眉)开始逐行显示。我选择了这种方法:
function Get-ObjectProperties {
param (
[object] $Object
)
$Properties = New-ArrayList
foreach ($O in $Object) {
$ObjectProperties = $O.PSObject.Properties.Name
foreach ($Property in $ObjectProperties) {
Add-ToArrayAdvanced -List $Properties -Element $Property -SkipNull -RequireUnique
}
}
return $Properties | Sort-Object
}
我已经将它添加到PSSharedGoods
模块(Install module PSSharedGoods
),因为我还使用了New ArrayList
,添加到我添加到该模块中的arrayaadvanced
函数。它可能不需要那些额外的功能就可以完成,但是因为我已经经常使用它们了,所以我不介意
我尝试过其他东西,比如:
$properties = Get-ADObject -SearchBase (Get-ADRootDSE).SchemanamingContext -Filter {name -eq "User"} -Properties MayContain, SystemMayContain | `
Select-Object @{name = "Properties"; expression = {$_.maycontain + $_.systemmaycontain}} | Select-Object -ExpandProperty Properties
$Test1 = Get-ADUser -Server $Domain -ResultPageSize 5000000 -Filter * -Properties $properties
或:
但它并不能返回所有内容。我在简单域上使用的方法返回了181个属性(来自我的函数)。其他方法返回43或类似结果。它仍然没有返回所有的东西,但它比我以前拥有的要好。例如,它返回ExtensionAttribute10
,但不返回其他对象,这是因为我的广告中只有一个对象具有该集合
我不确定如何确保所有可能的字段都可用 这听起来像是应该由创建广告用户模式的人来解决的问题,而不是用一个“一网打尽”的powershell脚本。不确定你的意思是什么?它是干净的AD 2016+已安装Exchange 2013。事情就是这样。模式与此无关。每个对象只返回“设置”的数据。如果它没有设置,它就不会返回。所以我在寻找一种方法来获取所有数据。无论它是否有这些数据。AD总是这样。如果没有设置属性,则不会返回。如果你描述一下结局可能会有所帮助goal@RichardSiddaway解决这个问题的办法是最终目标。。这是完美的吗state@RichardSiddaway还有这个和。两者都获取对象并将其放入表中。为了在表中获得正确的标题,我需要知道对象中可能存在的所有字段。
function Get-ObjectProperties {
param (
[object] $Object
)
$Properties = New-ArrayList
foreach ($O in $Object) {
$ObjectProperties = $O.PSObject.Properties.Name
foreach ($Property in $ObjectProperties) {
Add-ToArrayAdvanced -List $Properties -Element $Property -SkipNull -RequireUnique
}
}
return $Properties | Sort-Object
}
$properties = Get-ADObject -SearchBase (Get-ADRootDSE).SchemanamingContext -Filter {name -eq "User"} -Properties MayContain, SystemMayContain | `
Select-Object @{name = "Properties"; expression = {$_.maycontain + $_.systemmaycontain}} | Select-Object -ExpandProperty Properties
$Test1 = Get-ADUser -Server $Domain -ResultPageSize 5000000 -Filter * -Properties $properties
$Test1 = Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -Filter {name -like "User"} -Properties MayContain, SystemMayContain |
Select-Object @{n = "Attributes"; e = {$_.maycontain + $_.systemmaycontain}} | Select-Object -ExpandProperty Attributes | Sort-Object
$Test2 = Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -ldapfilter '(systemFlags:1.2.840.113556.1.4.803:=4)' -Properties systemFlags |
Select-Object Name | Sort-Object Name