Suchen & Ersetzen von Dateiinhalten – Powershell

Erläuterung

// Suchen & Ersetzen von Dateiinhalten mit Powershell //
Dieses Skript sucht nach dem „Suchbegriff“ in Klartext-Dateien (Dateien die nicht verschlüsselt oder codiert sind txt,html etc.) rekursiv durch die Unterverzeichnisse und ersetzt, falls gewünscht, die Inhalte der Dateien durch die eigens angegebenen.

$DateiTypen gibt den zu durchsuchenden DateiTyp an.
Wird nur der Parameter „SuchenNach“ angegeben, dann ersetzt das Skript nichts, sondern zeigt nur die Dateien die jeweils den gesuchten Begriff beinhalten an.

Skript

<#

Author: Jan Weis
Version: 0.1

Purpose: Sucht und Ersetzt Informationen in Dateien.

#>


param
(
    [Parameter(Mandatory = $true,Position = 0)][String]$Pfad,
    [Parameter(Mandatory = $true,Position = 1)][String]$SucheNach,
    [Parameter(Mandatory = $false,Position = 2)][String]$ErsetzeDurch
)

[Int]$i = 0
$DateiTypen = '*.htm','*.html'


Write-Host 'Durchsuche Verzeichnisse...' -NoNewline -ForegroundColor Yellow
$Ordner = Get-ChildItem -Path $Pfad -Include $DateiTypen -Recurse -File
Write-Host 'OK!' -ForegroundColor Green
Write-Host "Gefundene Dateien: $($ordner.Count)" -ForegroundColor Yellow

foreach ($Datei in $Ordner)
{
    try
    {
        # Dateiinhalt auslesen
        [Array]$DateiInhalt = Get-Content -Path $Datei -Encoding UTF8 

        $i++

        # Inhalt überprüfen und ersetzen
        if ($DateiInhalt -notlike '')
        {
            if (Select-String -InputObject $DateiInhalt -Pattern $SucheNach)
            {
                if ($ErsetzeDurch -like '')
                {
                    Write-Host ''
                    Write-Host "[-] Inhalt gefunden - '$($Datei.FullName)'" -ForegroundColor Yellow
                }
                else
                {
                    [String]$Inhalt = $DateiInhalt
                    $Inhalt = $Inhalt.Replace($SucheNach,$ErsetzenDurch)
                    $Inhalt | Out-File -FilePath $Datei -Encoding utf8
                
                    Write-Host ''
                    Write-Host "[-] Inhalt gefunden und geändert - '$($Datei.FullName)'" -ForegroundColor Yellow
                }
            }
        }
    
        if ($i -like '*00')
        {
            Write-Host '.' -NoNewline
        }
    }
    catch
    {
        "Error was $_"
        $line = $_.InvocationInfo.ScriptLineNumber
        "Error was in Line $line"
    }
}