Я выбрал этот подход:
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
, Add-ToArrayAdvanced
, которые я 'мы добавили в этот модуль.Возможно, это можно сделать без этих дополнительных функций, но так как я уже часто их использую, я не против.
Я пробовал другие вещи, такие как:
$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
Но это просто не все возвращает.Метод, который я использовал в моем простом домене, вернул 181 свойство (из моей функции).Другие методы вернули 43 или аналогичные.Это все еще не возвращает все, но это лучше, чем у меня было раньше.Например, он возвращает ExtensionAttribute10
, но не другие, но это потому, что только 1 объект в моей AD имеет этот набор.
Я не уверен, как я могу быть уверен, чтобы получить все возможные поля доступны.