1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| Function Get-LocalGroupMembers
{
param(
[Parameter(ValuefromPipeline=$true)][array]$server = $env:computername,
$GroupName = $null
)
PROCESS {
$finalresult = @()
$computer = [ADSI]"WinNT://$server"
if (!($groupName))
{
$Groups = $computer.psbase.Children | Where {$_.psbase.schemaClassName -eq "group"} | select -expand name
}
else
{
$groups = $groupName
}
$CurrentDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().GetDirectoryEntry() | select name,objectsid
$domain = $currentdomain.name
$SID=$CurrentDomain.objectsid
$DomainSID = (New-Object System.Security.Principal.SecurityIdentifier($sid[0], 0)).value
foreach ($group in $groups)
{
$gmembers = $null
$LocalGroup = [ADSI]("WinNT://$server/$group,group")
$GMembers = $LocalGroup.psbase.invoke("Members")
$GMemberProps = @{Server="$server";"Local Group"=$group;Name="";Type="";ADSPath="";Domain="";SID=""}
$MemberResult = @()
if ($gmembers)
{
foreach ($gmember in $gmembers)
{
$membertable = new-object psobject -Property $GMemberProps
$name = $gmember.GetType().InvokeMember("Name",'GetProperty', $null, $gmember, $null)
$sid = $gmember.GetType().InvokeMember("objectsid",'GetProperty', $null, $gmember, $null)
$UserSid = New-Object System.Security.Principal.SecurityIdentifier($sid, 0)
$class = $gmember.GetType().InvokeMember("Class",'GetProperty', $null, $gmember, $null)
$ads = $gmember.GetType().InvokeMember("adspath",'GetProperty', $null, $gmember, $null)
$MemberTable.name= "$name"
$MemberTable.type= "$class"
$MemberTable.adspath="$ads"
$membertable.sid=$usersid.value
if ($userSID -like "$domainsid*")
{
$MemberTable.domain = "$domain"
}
$MemberResult += $MemberTable
}
}
$finalresult += $MemberResult
}
$finalresult | select server,"local group",name,type,domain,sid
}
} |
Partager