Skip to main content

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"