Hui, ist ja schon 3 Jahre her.
Also ich hatte damals zwei Scripts genutzt.
Das erste sucht die Mozilla- bzw. SeaMonkey-Profile (hießen bei uns genau so, also nicht die Zufallnamen wie jetzt üblich) und gibt die Pfade aus. Es erwartet dabei in $homedir ein Verzeichnis mit allen Userverzeichnissen, die wiederum einen Ordner SeaMonkey oder Mozilla enthalten:
Code
$homedir = "\\ubsrvfile2\homenew$"
#$homedir = "\\ubsrvback3\home$"
$folderlist = dir $homedir | where { (test-path ($homedir + "\" + $_ + "\SeaMonkey")) -or (test-path ($homedir + "\" + $_ + "\Mozilla")) }
foreach($folder in $folderlist) {
# Profil-Verzeichnis suchen
$profdir = $homedir + "\" + $folder
if(test-path ($homedir + "\" + $folder + "\SeaMonkey")) {
$profdir += "\SeaMonkey"
} elseif(test-path ($homedir + "\" + $folder + "\Mozilla")) {
$profdir += "\Mozilla"
} else {
continue
}
if( -not (test-path ($profdir + "\prefs.js"))) {
$profdir += "\" + (dir $profdir | sort -descending -property LastWriteTime | select-object -first 1)
}
$profdir
}
Alles anzeigen
Das zweite Script macht die eigentliche Arbeit und verwendet dabei die Pfadliste vom ersten Script. Ich hatte damals für das Ersetzen in der Datei das aus UNIX stammende Programm sed genutzt.:
Code
param([string]$path)
$proffile = "profdirs.txt"
$suffix = "_187362"
function repairfolder($path) {
if( -not (test-path $path) ) {
"WARNING: path not found"
return
}
#$path
$files = get-childitem -recurse -force $path | where-object { $_.Mode -notlike "d*" -and $_.Name -notmatch "(\.msf|\.dat|\.html|\.rdf)$" }
foreach($file in $files) {
if( select-string -path $file.FullName -pattern "^>From amavis" ) {
("REPAIR: " + $file.FullName) | out-file "repair.log" -append
cmd /C ('sed "/^>From amavis/d" "' + $file.FullName + '" > "' + ($file.FullName + $suffix) + '"')
remove-item $file.FullName
if( test-path ($file.FullName + ".msf") ) {
remove-item ($file.FullName + ".msf")
}
rename-item -path ($file.FullName + $suffix) -newname $file.Name
}
}
}
if($path) {
repairfolder($path)
} else {
$dirs = get-content $proffile
foreach($path in $dirs) {
$path
# Prüfen ob SeaMonkey läuft
if(test-path ($path + "\parent.lock")) {
"WARNING: parent.lock found"
continue
}
# SeaMonkey-Start verhindern mit Lock von parent.lock
$fs = [IO.File]::Create($path + "\parent.lock")
$sw = New-Object IO.StreamWriter($fs)
repairfolder($path + "\Mail")
# Lock entfernen
$sw.Close()
remove-item ($path + "\parent.lock")
}
}
"FINISH"
Alles anzeigen