我有以下代码来生成计算机上本地管理员组的成员列表:
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标签。
答案 0 :(得分:0)
我在这里写了一个ComObject Wrapper:https://stackoverflow.com/a/30477959/1701026
使用此包装器,您可以轻松地像Name
和ADsPath
那样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 :