如何枚举System._comobject的所有属性

时间:2017-09-07 21:02:50

标签: powershell

我有以下代码来生成计算机上本地管理员组的成员列表:

    param([string]$server)
    $localGroupArray =@() 

    $groupName = 'Administrators'
    $Group = [ADSI]"WinNT://$Server/$groupName,group" 
    $Members = @($Group.psbase.Invoke("Members"))
    [Array]$class = $members | Foreach {$_.GetType().InvokeMember("Class", 'GetProperty', $null, $_, $null)}
    [Array]$MemberNames = $Members |  ForEach-Object {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}

这可以按预期工作,但我需要了解有关对象的更多信息,例如域,如果它是域组。所以我想列出我可以使用InvokeMember查询的所有属性,但我找不到一个好的解决方案。

使用Get-Member等常规方法不起作用,因为这是一个system._comobject。以下是Comobject上的Get_member的输出:

   Name                      MemberType Definition
   ----                      ---------- ----------
   CreateObjRef              Method     System.Runtime.Remoting.ObjRef                      CreateObjRef(type requestedType)
    Equals                    Method     bool Equals(System.Object obj)
    GetHashCode               Method     int GetHashCode()
    GetLifetimeService        Method     System.Object GetLifetimeService()
    GetType                   Method     type GetType()
    InitializeLifetimeService Method     System.ObjectInitializeLifetimeService()
    ToString                  Method     string ToString() 

我也尝试过查看是否能找到c#解决方案,并且能够找到此链接:How return the type of a System.__COMObject in System.Type in C#

但是,当我尝试在comobect上运行GetProperties时,我编写的程序没有得到任何PropertyDescription。如果需要,我也可以发布c#代码,但我觉得这有点偏离主题,因为我只发布了Powershell标签。

1 个答案:

答案 0 :(得分:0)

我在这里写了一个ComObject Wrapper:https://stackoverflow.com/a/30477959/1701026

使用此包装器,您可以轻松地像NameADsPath那样grep属性,如下所示:

([ADSI]"WinNT://$Server/$groupName,group").psbase.Invoke("Members") | ForEach {ComInvoke $_ "ADsPath"}

列出$Member的所有属性:

$Member = ([ADSI]"WinNT://./$groupName,group").psbase.Invoke("Members") | Select -First 1
[ADSI](ComInvoke $Member ADsPath) | Select -Property *

输出:

UserFlags                  : {66049}
MaxStorage                 : {-1}
PasswordAge                : {37774360}
PasswordExpired            : {0}
LoginHours                 : {255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255}
FullName                   : {}
Description                : {Built-in account for administering the computer/domain}
BadPasswordAttempts        : {0}
LastLogin                  : {7/19/2017 9:40:10 AM}
HomeDirectory              : {}
LoginScript                : {}
Profile                    : {}
HomeDirDrive               : {}
Parameters                 : {}
PrimaryGroupID             : {513}
Name                       : {Administrator}
MinPasswordLength          : {7}
MaxPasswordAge             : {3628800}
MinPasswordAge             : {86400}
PasswordHistoryLength      : {24}
AutoUnlockInterval         : {1800}
LockoutObservationInterval : {1800}
MaxBadPasswordsAllowed     : {0}
objectSid                  : {1 5 0 0 0 0 0 5 21 0 0 0 164 27 234 42 18 243 14 131 177 3 198 122 244 1 0 0}
AuthenticationType         : Secure
Children                   : {}
Guid                       : {D83F1060-1E71-11CF-B1F3-0123456789AB}
ObjectSecurity             :
NativeGuid                 : {D83F1060-1E71-11CF-B1F3-0123456789AB}
NativeObject               : System.__ComObject
Parent                     : WinNT://DOMAIN
Password                   :
Path                       : WinNT://DOMAIN/Administrator
Properties                 : {UserFlags, MaxStorage, PasswordAge, PasswordExpired...}
SchemaClassName            : User
SchemaEntry                : System.DirectoryServices.DirectoryEntry
UsePropertyCache           : True
Username                   :
Options                    :
Site                       :
Container                  :