Zum Inhalt springen
IT Explorations

Suchen & Ersetzen von Dateiinhalten - Powershell

· 1 min Lesezeit · von

Kurz & knapp: Das PowerShell-Skript durchsucht Klartext-Dateien (z. B. *.htm, *.html) rekursiv nach einem Suchbegriff und ersetzt ihn optional. Ohne den Parameter ErsetzeDurch werden nur die Fundstellen angezeigt. Aufruf: .\skript.ps1 -Pfad <Ordner> -SucheNach <Begriff> [-ErsetzeDurch <Ersatz>].

Erläuterung#

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,$ErsetzeDurch)
                    $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"
    }
}

Kategorien: Skripte

Verwandte Beiträge