Wyszukiwanie frazy we wszystkich GPO.
Skrypt tworzy katalog gdzie eksportuje pliki xml GPO po czym przeszukuje w nich ustawioną frazę. Katalog oraz pliki utworzą się w aktywnym katalogu PWSH
Skrypt uruchamiamy w PWSH z uprawnieniami administratora, na kontrolerze domeny
# Definiujemy wzorzec wyszukiwania na samej górze
$searchPattern = "SvcUpddate"
Write-Host "`nTworzę folder na raporty GPO w bieżącym katalogu..."
# Próba pobrania ścieżki skryptu, jeśli brak to używamy bieżącego katalogu
if ($MyInvocation.MyCommand.Path) {
$scriptFolder = Split-Path -Parent $MyInvocation.MyCommand.Path
} else {
Write-Host "Nie wykryto ścieżki skryptu, używam bieżącego katalogu."
$scriptFolder = (Get-Location).Path
}
$folder = Join-Path $scriptFolder "GPOReports"
New-Item -Path $folder -ItemType Directory -Force | Out-Null
Write-Host "Pobieram wszystkie obiekty GPO z domeny..."
$allgpos = Get-GPO -All
# Plik do zapisania raportu z listą i wynikiem w folderze skryptu
$reportFile = Join-Path $scriptFolder "GPO_export_and_scan_report.txt"
# Czyszczenie pliku jeśli istnieje
if (Test-Path $reportFile) {
Remove-Item $reportFile
}
Write-Host "Eksportuję wszystkie GPO do osobnych plików XML oraz zapisuję listę do pliku raportu..."
Add-Content -Path $reportFile "Lista wyeksportowanych GPO:`n"
$allgpos | ForEach-Object {
$path = Join-Path $folder ("{0}_{1}.xml" -f $_.DisplayName, $_.Id)
Write-Host ("Eksportuję GPO: {0}" -f $_.DisplayName)
Get-GPOReport -Guid $_.Id -ReportType Xml -Path $path
Add-Content -Path $reportFile $_.DisplayName
}
# Dodaj pustą linię do rozdzielenia sekcji
Add-Content -Path $reportFile "`nWyniki wyszukiwania wzorca '$searchPattern':`n"
Write-Host "Szukam wzorca '$searchPattern' we wszystkich wyeksportowanych raportach..."
$patternMatches = Select-String -Path (Join-Path $folder "*.xml") -Pattern $searchPattern
if ($patternMatches -and $patternMatches.Count -gt 0) {
$patternMatches | ForEach-Object { Add-Content -Path $reportFile $_.ToString() }
} else {
Add-Content -Path $reportFile "Brak wzorca '$searchPattern' w żadnym z raportów GPO."
}
Write-Host "`nGotowe! Pełny raport w pliku: $reportFile"