param([string]$configPath="C:\Xylem\ADGroups\config.xml")$omApi=New-Object-ComObject'MOM.ScriptAPI'$omDiscoveryData=$omApi.CreateDiscoveryData(0,'$MPElement$','$Target/Id$')$scriptName="Discover-ADGroupMembers.ps1"$testResult=Test-Path-Path$configPathif($testResult){[xml]$configXml=Get-Content$configPath## Get windows servers in MG to avoid issue #1# https://bitbucket.org/stegenfeldt/xylem.ad.groups/issue/1/discovery-fails-when-member-of-ad-group-is$windowsServerClass=Get-SCOMClass-Name"Microsoft.Windows.Computer"$windowsServers=Get-SCOMClassInstance-Class$windowsServerClass# I am aware that this will get virtual (cluster) nodes as well, and that's intentional.##foreach($adGroupXMLin$configXML.ADGroups.ADGroup){[string]$adGroupDN=$adGroupXML.GroupDN[string]$adGroupDisplayName=$adGroupXML.DisplayName$omApi.LogScriptEvent($scriptName,6661,0,"Parsing AD-group $adGroupDN")$omGroupInstance=$omDiscoveryData.CreateClassInstance('$MPElement[Name="Xylem.AD.Groups.RoleBasedServerGroup"]$')$omGroupInstance.AddProperty('$MPElement[Name="Xylem.AD.Groups.RoleBasedServerGroup"]/GroupDN$',$adGroupDN)$omGroupInstance.AddProperty('$MPElement[Name="System!System.Entity"]/DisplayName$',$adGroupDisplayName)$omDiscoveryData.AddInstance($omGroupInstance)$adsiGroup=[adsi]"LDAP://$adGroupDN"foreach($adsiGroupMemberDNin$adsiGroup.member.Value){$adsiGroupMember=[adsi]"LDAP://$adsiGroupMemberDN"if(($adsiGroupMember.objectClass-eq"computer")-AND($windowsServers.Name-contains$adsiGroupMember.dNSHostName)){[string]$computerDNSHostName=$adsiGroupMember.dNSHostName# $omApi.LogScriptEvent($scriptName,6661,0,"Found $computerDNSHostName at $adsiGroupMemberDN")$omComputerInstance=$omDiscoveryData.CreateClassInstance('$MPElement[Name="Windows!Microsoft.Windows.Computer"]$')$omComputerInstance.AddProperty('$MPElement[Name="Windows!Microsoft.Windows.Computer"]/PrincipalName$',$computerDNSHostName)$omGroupContainment=$omDiscoveryData.CreateRelationshipInstance('$MPElement[Name="MSIL!Microsoft.SystemCenter.InstanceGroupContainsEntities"]$')$omGroupContainment.Source=$omGroupInstance$omGroupContainment.Target=$omComputerInstance$omDiscoveryData.AddInstance($omGroupContainment)}}}}$omDiscoveryData
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.