image2

You Are here: Start Kategorie als Blog Dateinhalte per PowerShell austauschen

Dateinhalte per PowerShell austauschen PDF Drucken E-Mail
Donnerstag, den 09. Oktober 2014 um 18:26 Uhr

Es kommt immer mal wieder vor, dass man Links in Dateien aktualisieren muss, da sich Pfade verändern. Gerade hatten wir den Fall, dass bei einer Sharepoint-Migration einige 100 Referenzen in HTM- und XML-Files aktualisiert werden mussten. Das entsprechenden Script gibt es unten. Einfach als ps1-Script abspeichern und in dem entsprechenden Verzeichnis ausführen.

Das Script durchsucht alle Unterverzeichnisse nach entsprechenden Dateien und logged alles in einem LogFile auf dem Desktop mit. Paralle wird ein Counter hochgezählt, damit man am Ende ein kleine Zusammenfassung erhält:

#Auszutauschenden Code definieren
$oldCode = "alter Text"
$newCode
= "neuer Text"

#LogDetails setzen
$log
="Replace{0:yyyyMMdd-HHmm}" -f (Get-Date)
$windows_path
= $env:homeshare
$logfile = $windows_path+'\Profil\Desktop\Test\'+$log+'.txt'

#Counter für die Statistik
$count1 = 0
$count2 = 0

#Ausführliches Logging
Start-Transcript
-Path $logfile -Append

#Eigentliches Script
ls -recurse|where {($_.Name -like "*.htm") -or ($_.Name -like "*.xml")}| foreach {

$fileContent = Get-Content $_.FullName
$containsWord
= $fileContent | %{$_ -match $oldCode}
Write-Output
"Check - $($_.Fullname)...`r`n"
$count1
= $count1 + 1
If($containsWord -contains $true)

{
$count2
= $count2 + 1
$newFileContent
= $fileContent -replace $oldCode, $newCode

Set-Content -Path $_.FullName -Value $newFileContent

 

Write-Output "Processed - $($_.Fullname)...`r`n"

}
}

#Zusammenfassung ausgeben
Write-Output
"`r`n"
Write-Output
"Gescannt - $($count1)...`r`n"
Write-Output
"Ersetzt - $($count2)...`r`n"

# Stoppen des Logging
Stop-Transcript