Назад | Перейти на главную страницу

Невозможно определить свойства элемента в PowerShell

Пытаясь ответь на этот вопрос Я столкнулся с чем-то, что меня беспокоило какое-то время, и я не мог найти ответа.

В следующем блоке сценария будут перечислены имена всех членов группы локальных администраторов.

$group = [ADSI]"WinNT://./Administrators"
@($group.Invoke("Members")) | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}

Однако он будет перечислять только имена и никакие другие свойства.

Я почти уверен, что есть и другие свойства Members которые я мог бы извлечь, но я не понимаю, как я могу определить, что это за другие свойства.

Мне не обязательно знать дополнительные свойства этого предмета, это скорее вопрос, как я буду искать их.

(Прошу прощения, если все это немного расплывчато, я очень много учусь всему этому, и я хорошо понимаю, что могу лаять не на то дерево и / или делать регулярные ужасные ошибки.)

Проблема в том, что вы имеете дело с COM-объектом, и эти объекты, похоже, не позволяют показать вам все в PowerShell.

Вы также можете взглянуть на аналогичный вопрос в другом потоке (C #) здесь: https://stackoverflow.com/questions/10615019/get-property-names-via-reflection-of-an-com-object

Пожалуйста, посмотрите доступные свойства здесь:

http://msdn.microsoft.com/en-us/library/aa705950(v=VS.85).aspx

и аналогичный пример к вашему вопросу:

http://social.technet.microsoft.com/Forums/windowsserver/en-US/b4d51781-e304-45b1-a7b1-c21b62263540/adsi-local-group-enum-from-fancy-powershell-to-simple-foreach- переписать? forum = winserverpowershell

Поскольку вы уже получаете список имен участников группы, чтобы получить подробную информацию о членах, я бы просто запросил еще раз, за ​​исключением индивидуального пользователя, а не группы.

PS C:\> $group = [ADSI]"WinNT://./administrators"
PS C:\> $members = $group.Invoke("Members") | %  {$_.GetType().InvokeMember("name", 'GetProperty', $null, $_, $null) }
PS C:\> $membersObjects = @() ; $members | % { $membersObjects += [ADSI]"WinNT://./$_" }
PS C:\> $membersObjects | gm

   TypeName: System.DirectoryServices.DirectoryEntry

Name                        MemberType Definition
----                        ---------- ----------
ConvertDNWithBinaryToString CodeMethod static string ConvertDNWithBinaryToString(psobject deInstance, psobject dnWithBinaryInstance)
ConvertLargeIntegerToInt64  CodeMethod static long ConvertLargeIntegerToInt64(psobject deInstance, psobject largeIntegerInstance)
AutoUnlockInterval          Property   System.DirectoryServices.PropertyValueCollection AutoUnlockInterval {get;set;}
BadPasswordAttempts         Property   System.DirectoryServices.PropertyValueCollection BadPasswordAttempts {get;set;}
Description                 Property   System.DirectoryServices.PropertyValueCollection Description {get;set;}
FullName                    Property   System.DirectoryServices.PropertyValueCollection FullName {get;set;}
HomeDirDrive                Property   System.DirectoryServices.PropertyValueCollection HomeDirDrive {get;set;}
HomeDirectory               Property   System.DirectoryServices.PropertyValueCollection HomeDirectory {get;set;}
LastLogin                   Property   System.DirectoryServices.PropertyValueCollection LastLogin {get;set;}
LockoutObservationInterval  Property   System.DirectoryServices.PropertyValueCollection LockoutObservationInterval {get;set;}
LoginHours                  Property   System.DirectoryServices.PropertyValueCollection LoginHours {get;set;}
LoginScript                 Property   System.DirectoryServices.PropertyValueCollection LoginScript {get;set;}
MaxBadPasswordsAllowed      Property   System.DirectoryServices.PropertyValueCollection MaxBadPasswordsAllowed {get;set;}
MaxPasswordAge              Property   System.DirectoryServices.PropertyValueCollection MaxPasswordAge {get;set;}
MaxStorage                  Property   System.DirectoryServices.PropertyValueCollection MaxStorage {get;set;}
MinPasswordAge              Property   System.DirectoryServices.PropertyValueCollection MinPasswordAge {get;set;}
MinPasswordLength           Property   System.DirectoryServices.PropertyValueCollection MinPasswordLength {get;set;}
Name                        Property   System.DirectoryServices.PropertyValueCollection Name {get;set;}
objectSid                   Property   System.DirectoryServices.PropertyValueCollection objectSid {get;set;}
Parameters                  Property   System.DirectoryServices.PropertyValueCollection Parameters {get;set;}
PasswordAge                 Property   System.DirectoryServices.PropertyValueCollection PasswordAge {get;set;}
PasswordExpired             Property   System.DirectoryServices.PropertyValueCollection PasswordExpired {get;set;}
PasswordHistoryLength       Property   System.DirectoryServices.PropertyValueCollection PasswordHistoryLength {get;set;}
PrimaryGroupID              Property   System.DirectoryServices.PropertyValueCollection PrimaryGroupID {get;set;}
Profile                     Property   System.DirectoryServices.PropertyValueCollection Profile {get;set;}
UserFlags                   Property   System.DirectoryServices.PropertyValueCollection UserFlags {get;set;}

Расширение идеи @Jacob. Когда вы перечисляете членов группы, возвращаются только строковые объекты, а не пользовательские объекты AD. Следовательно, доступны только строковые свойства (например, длина и т. Д.). Вам нужно снова запросить AD, используя имя в качестве параметра -identity, чтобы получить свойства пользователя.

В AD вы можете сделать что-то вроде этого:

$(get-adgroup "administrators" -Properties members).members|foreach {get-aduser -identity $_}

Я не могу говорить о коде WinNT