MyADTools.psm1
function Search-ADGroup { [CmdletBinding()] param ( [Parameter(Mandatory)] [string] $string ) begin{ $DomainName = $env:USERDNSDOMAIN write-host "Finding all the AD groups in $DomainName" Import-Module activedirectory $alladgroups = Get-ADGroup -Filter * -Properties * $countnamematches=@() $countdescmatches=@() # Look through each AD Group name and description Write-Host "Starting search...." } process{ foreach ($adgroup in $alladgroups) { if ($adgroup -match $string) { write-host "AD name match found in: $($adgroup.Name)" $countnamematches+=$adgroup } } foreach ($adgroup in $alladgroups) { if (($adgroup.Description -match $string) -and (($adgroup -notmatch $string))) { write-host "Description match found in: $($adgroup.Name) Description: '$($adgroup.description)'" $countdescmatches+=$adgroup } } Write-Host "*Search ended*" } end{ if ($null -eq $countnamematches) { Write-Host "Searchstring was not found in any AD group name" } elseif ($null -eq $countdescmatches) { Write-Host "Searchstring was not found in any AD group description" } elseif (($null -eq $countnamematches) -and ($null -eq $countdescmatches)) { Write-Host "Searchstring was not found anywhere" } else { Write-Host "Search results: `nMatches in name: $($countnamematches.count) `nMatches in description: $($countdescmatches.count) `nTotal matches: $(($countnamematches.count)+($countdescmatches.count))" -ForegroundColor Green -BackgroundColor Black } } } function Search-GPO { [CmdletBinding()] param ( [parameter(Mandatory, ValueFromPipeline=$true, ParameterSetName="String", HelpMessage="What string do you want to search for?")] $String ) begin { # Set the domain to search for GPOs $DomainName = $env:USERDNSDOMAIN # Find all GPOs in the current domain write-host "Finding all the GPOs in $DomainName" Import-Module grouppolicy $allGposInDomain = Get-GPO -All -Domain $DomainName $FoundGPOs = New-Object -TypeName System.Collections.ArrayList $ProgressCount=1 Write-Host "Starting search...." } process { foreach ($gpo in $allGposInDomain) { $report = Get-GPOReport -Guid $gpo.Id -ReportType Xml [int]$progress=$(($ProgressCount/$allGposInDomain.count)*100.) Write-Progress -Activity "Searching GPOs for the string: $($String)" -Status "$($progress)% Complete" -PercentComplete (($ProgressCount/$allGposInDomain.count)*100) $ProgressCount++ if ($report -match $String) { write-host "********** Match found in: $($gpo.DisplayName) **********" $FoundGPOs+=$gpo } } } end { Write-Progress -Activity "Searching GPOs for the string: $($String)" -Status "$($progress)% Complete" -PercentComplete 100 if ($FoundGPOs){ Write-Host "Search completed with $($FoundGPOs.count) matches shown above" } else{ Write-Host "Search completed with $($FoundGPOs.count) matches" } } } Export-ModuleMember -Function Search-GPO Export-ModuleMember -Function Search-ADGroup |