trotzdem alles in Ruhe erledigen
Ist ja mein Reden hier oft im Forum.
Gaaaanz in Ruhe machen...dann klappt das auch
trotzdem alles in Ruhe erledigen
Ist ja mein Reden hier oft im Forum.
Gaaaanz in Ruhe machen...dann klappt das auch
Batch ist schlichtweg ein Relikt, und kann schon lange nicht mehr alles, was man für Windows zB per Powershell könnte. Dafür kann Powershell auch Befehle von DOS ausführen, nur wird das anders umgesetzt meine ich, es gibt keine aktive Eingabeaufforderung falls überhaupt. Es ist eines, wenn Microsoft den Rummel mitschleppt, es ist was ganz anders, es auch nutzen zu wollen. Und wie gesagt, die Geschwindigkeit ist unterirdisch. Was ich selbst noch aktiv nutze ich NET oder MKLINK, seltener noch deltree, wobei das Original nur 32-Bit kann, es gibt aber auch eine freie Variante eines Hobby-Programmierers für 64-Bit (nativ natürlich).
Grob umrissen, wenn auch vielleicht schon zu speziell
SMB erkennen und schalten, kann die Eingabeaufforderung nicht
.NET gar nicht in der Eingabeaufforderung
CMD-Befehle in PowerShell über Aliase und Funktionen verwenden | WindowsPro
Manches kann auch nicht mehr so wie in DOS umgesetzt werden.
Diverse Scripte und Programme laufen hier nativ, es ist zum einen erheblich mehr und vor allem einfacher zu machen, und auch wesentlich schneller. Deswegen auch der Verweis auf zB FreeFileSync, dass zum einen flexibel programmiert werden kann, aber die Umsetzung dann wieder mit reinem Maschinencode ausgeführt wird, plus Prüfung etc. Muss man einfach mal gesehen haben.
Für mich bleibt dann immer noch die Frage offen, warum gibt es das selbst von Microsoft.
Hallo
als Backup? Wo denn?
es gibt keine aktive Eingabeaufforderung falls überhaupt
Wie kommst Du denn auf dieses schmale Brett?
Gruß Ingo
Das bezog sich auf die Ausführung von DOS-Befehlen in PS, als dass ein neues, nicht sichtbares Fenster ausgeführt wird, nicht auf die Eingabe in PS selbst. Nachfragen hätte nicht geschadet.
als Backup? Wo denn?
Ich weiß ja was Du meinst, also lassen wir das ruhen.
Nun hast Du mir ständig mit der Rute gedroht, und ich war so stolz auf mich, dass mir das als "Freizeitsportler" gelungen ist.
Aber gut, ich habe volles Verständnis dafür, was soll man sich mit "altem" Kram beschäftigen.
Schön wäre es aber trotzdem gewesen, wenn Du als Profi mir über PowerShell einen Weg gezeigt hättest (Beispiel).
Nun habe ich es wieder versucht, und bin auch damit zufrieden, erwarte nun von Dir eine kritische Betrachtung dazu. Ist das so i.O.?
sichern.ps1
Remove-Item -Path B:\Backup-Firefox\FinaleTest\ehrfnvh7.Test -Recurse
Copy-Item -Path C:\Users\Oldi\AppData\Roaming\Mozilla\Firefox\Profiles\ehrfnvh7.Test -Destination B:\Backup-Firefox\FinaleTest -Recurse
restore.ps1
Wegen der fehlenden Beispiele - ich nutze Powershell so gut wie gar nicht. SMB ist nur eines der ganz wenigen und das auch nur per copy&paste damals, uräschlich war was ganz anderes. Und Batch auch nur wie beschrieben. Zudem nutze ich für meine Bequemlichkeit und anderes eigene kleine Programme, die ich oben ja schon erwähnt hatte. Powershell ist mächtig, aber mit meinen "Anforderungen" nicht wirklich kompatibel (wir reden über 1000 Zeilen und mehr /strukturiereten/ Code), dafür kann man PS-Scripte aber wunderbar weitergeben.
erwarte nun von Dir
Darfst du - ob du was bekommst... Wenn deine Scripte funktionieren, weil du dich eingearbeitet hast, dann finde ich das gut. Einfach den Anfang finden
Ich hatte ja angekündigt, eine weitere Möglichkeit der Sicherung des Profilordners zu erläutern, sowie auch eine Möglichkeit zu schaffen, diesen unkompliziert wieder zu restaurieren.
Ich möchte keine Diskusion erwarten über Sinn oder Unsinn dieser Methode, es stellt nur eine weitere voll funktionsfähige Lösung für mich dar, die ich nicht mehr entbehren möchte.
Verbesserungsvorschläge hierzu sind jederzeit willkommen.
Alles wird über zwei PowerShell-Scripte absolviert (Endung .ps1), einmal für Sicherung, und einmal für Restauration. Es gibt bei mir auf Laufwerk E: einen Ordner BackupFirefox, mit Unterordnern für jede genutzte Version von Firefox (z.B. ArbeitsFox, beta1, Nightly1, usw.).
In jeden dieser Unterordner kommen beide Scripte eingefügt. Das Wichtigste kommt aber dann, weil vorab in den Scripten immer die passenden Pfade für die jeweilige Version eingetragen werden müssen. Das sollte nicht auf die leichte Schulter genommen werden, sonst kann es passieren, dass ein Profil ganz verschwunden ist.
Deshalb meine Empfehlung, dass vor Beginn des Testens der Profilordner manuell gesichert werden sollte. Später, wenn alles zufrieden läuft, kann jeder für sich entscheiden, was er/sie für richtig hält.
Für die installierten Versionen kann in der Adresszeile about:support eingegeben werden, dort ist dann ganz einfach der genaue Pfad zum Profilordner zu entnehmen.
Ich werde ein Beispiel für die installierte Version, und ein Beispiel für portable Versionen vorstellen, ist dann eventuell einfacher zu erkennen.
Schaut im ersten Moment nach viel Arbeit aus, wird aber doch nur einmal für jede Version erforderlich sein. Wegen der Pfade sollte alles in Ruhe und überlegt gemacht werden, dann wird es auch funktionieren. Der Gebrauch erfolgt natürlich auf eigene Gefahr.
Wie arbeiten jetzt die Scripte?
Gestartet werden sie mit rechter Maus, im Kontext "Mit PowerShell ausführen" auswählen (gibt noch andere Möglichkeiten), und die Arbeit beginnt.
Zuerst wird geprüft, ob im angegebenen Verzeichnis der benannte Profilordner vorhanden ist, ist er das, so wird er im zweiten Schritt gelöscht.
Dann wird der zu sichernde Profilordner kopiert, und wieder in das Sicherungs-Verzeichnis eingefügt. Zusätzlich wird eine Text-Datei geschrieben, mit dem Zeitpunkt der Sicherung.
Hinweis: Arbeite ich nur mit dem Script, dann habe ich immer die aktuelle Version zur Auswahl. Ich handhabe das so, wenn ein Profil erhalten werden soll, lasse ich es als Zip-Archiv komprimieren (rechte Maus/Senden an/Zipkomprimierter Ordner). Das bleibt dann zusätzlich im Sicherungs-Ordner erhalten. Wenn es mehrere sein sollen, so ändere ich den Namen des Archivs als Datum.
Die Restaurierung erfolgt auch so, Prüfen, Löschen, zurück kopieren des Profils.
Das ist z.B. der Inhalt des Verzeichnisses "Test" (installierte Version) im Ordner BackupFirefox:
Script zur Sicherung (installierte Version):
# überprüft, ob Profilordner vorhanden, und löscht diesen
if (Test-Path -Path "E:\BackupFirefox\Test\ehrfnvh7.Test") {
Remove-Item -Path "E:\BackupFirefox\Test\ehrfnvh7.Test" -Force -Recurse
}
# Pause 3 Sek.
Start-Sleep -s 3
# kopiert den aktuellen Profilordner in das vorgegebene Verzeichnis (-Recurse = mit allen Dateien und Subordnern)
Copy-Item -Path "C:\Users\baldm\AppData\Roaming\Mozilla\Firefox\Profiles\ehrfnvh7.Test" -Destination "E:\BackupFirefox\Test\ehrfnvh7.Test" -Recurse
# Pause 3 Sek.
Start-Sleep -s 3
# überprüft, ob Log-Datei namentlich vorhanden, vorherige log-Datei wird dann gelöscht
if (Test-Path -Path "E:\BackupFirefox\Test\Sicherung am.txt") {
Remove-Item -Path "E:\BackupFirefox\Test\Sicherung am.txt"
}
# Pause 3 Sek.
Start-Sleep -s 3
# neue log-Datei wird geschrieben (Sicherung am.txt)
# Pfad zum Ablegen der LogDatei
$LogPfad = "E:\BackupFirefox\Test"
# LogFile Prüfen und erstellen falls nicht vorhanden
if (!(Test-Path ("$LogPfad\$Datum" + "Sicherung am.txt")))
{
# Erstellen des LogFiles
$Logfile = (New-Item ("$LogPfad\$Datum" + "Sicherung am.txt") -ItemType File -Force).FullName
# Überschrift für das LogFile
Add-Content $Logfile ("Letzte Sicherung vom Profilordner am $(get-date -Format "dddd, dd. MMMM yyyy, HH:mm:ss") Uhr`n")
# Leerzeilen einfügen
Add-Content $Logfile "`n`n"
}
Alles anzeigen
Script zur Sicherung (portable Version)
# überprüft, ob Profilordner vorhanden, und löscht diesen
if (Test-Path -Path "E:\BackupFirefox\Firefox1p\Profilordner") {
Remove-Item -Path "E:\BackupFirefox\Firefox1p\Profilordner" -Force -Recurse
}
# Pause 3 Sek.
Start-Sleep -s 3
# kopiert den aktuellen Profilordner in das vorgegebene Verzeichnis (-Recurse = mit allen Dateien und Subordnern)
Copy-Item -Path "B:\Firefox Test\Firefox1p\Profilordner" -Destination "E:\BackupFirefox\Firefox1p\Profilordner" -Recurse
# Pause 3 Sek.
Start-Sleep -s 3
# überprüft, ob Log-Datei namentlich vorhanden, vorherige log-Datei wird dann gelöscht
if (Test-Path -Path "E:\BackupFirefox\Firefox1p\Sicherung am.txt") {
Remove-Item -Path "E:\BackupFirefox\Firefox1p\Sicherung am.txt"
}
# Pause 3 Sek.
Start-Sleep -s 3
# neue log-Datei wird geschrieben (Sicherung am.txt)
# Pfad zum Ablegen der LogDatei
$LogPfad = "E:\BackupFirefox\Firefox1p"
# LogFile Prüfen und erstellen falls nicht vorhanden
if (!(Test-Path ("$LogPfad\$Datum" + "Sicherung am.txt")))
{
# Erstellen des LogFiles
$Logfile = (New-Item ("$LogPfad\$Datum" + "Sicherung am.txt") -ItemType File -Force).FullName
# Überschrift für das LogFile
Add-Content $Logfile ("Letzte Sicherung vom Profilordner am $(get-date -Format "dddd, dd. MMMM yyyy, HH:mm:ss") Uhr`n")
# Leerzeilen einfügen
Add-Content $Logfile "`n`n"
}
Alles anzeigen
Script restore (installierte Version):
# überprüft, ob Profilordner vorhanden, und löscht diesen
if (Test-Path -Path "C:\Users\baldm\AppData\Roaming\Mozilla\Firefox\Profiles\ehrfnvh7.Test") {
Remove-Item -Path "C:\Users\baldm\AppData\Roaming\Mozilla\Firefox\Profiles\ehrfnvh7.Test" -Force -Recurse
}
# Pause 3 Sek.
Start-Sleep -s 3
# kopiert den gesicherten Profilordner in das Verzeichnis "Profiles" (-Recurse = mit allen Dateien und Subordnern)
Copy-Item -Path "E:\BackupFirefox\Test\ehrfnvh7.Test" -Destination "C:\Users\baldm\AppData\Roaming\Mozilla\Firefox\Profiles\ehrfnvh7.Test" -Recurse
# Pause 3 Sek.
Start-Sleep -s 3
# überprüft, ob Log-Datei namentlich vorhanden, vorherige log-Datei wird dann gelöscht
if (Test-Path -Path "E:\BackupFirefox\Test\Retour am.txt") {
Remove-Item -Path "E:\BackupFirefox\Test\Retour am.txt"
}
# Pause 3 Sek.
Start-Sleep -s 3
# neue log-Datei wird geschrieben (Retour am.txt)
# Pfad zum Ablegen der LogDatei
$LogPfad = "E:\BackupFirefox\Test"
# LogFile Prüfen und erstellen falls nicht vorhanden
if (!(Test-Path ("$LogPfad\$Datum" + "Retour am.txt")))
{
# Erstellen des LogFiles
$Logfile = (New-Item ("$LogPfad\$Datum" + "Retour am.txt") -ItemType File -Force).FullName
# Überschrift für das LogFile
Add-Content $Logfile ("In alten Zustand versetzt am $(get-date -Format "dddd, dd. MMMM yyyy, HH:mm:ss") Uhr`n")
# Leerzeilen einfügen
Add-Content $Logfile "`n`n"
}
Alles anzeigen
Script restore (portable Version):
# überprüft, ob Profilordner vorhanden, und löscht diesen
if (Test-Path -Path "B:\Firefox Test\Firefox1p\Profilordner") {
Remove-Item -Path "B:\Firefox Test\Firefox1p\Profilordner" -Force -Recurse
}
# Pause 3 Sek.
Start-Sleep -s 3
Copy-Item -Path "E:\BackupFirefox\Firefox1p\Profilordner" -Destination "B:\Firefox Test\Firefox1p\Profilordner" -Recurse
# Pause 3 Sek.
Start-Sleep -s 3
# überprüft, ob Log-Datei namentlich vorhanden, vorherige log-Datei wird dann gelöscht
if (Test-Path -Path "E:\BackupFirefox\Firefox1p\Retour am.txt") {
Remove-Item -Path "E:\BackupFirefox\Firefox1p\Retour am.txt"
}
# Pause 3 Sek.
Start-Sleep -s 3
# neue log-Datei wird geschrieben (Retour am.txt)
# Pfad zum Ablegen der LogDatei
$LogPfad = "E:\BackupFirefox\Firefox1p"
# LogFile Prüfen und erstellen falls nicht vorhanden
if (!(Test-Path ("$LogPfad\$Datum" + "Retour am.txt")))
{
# Erstellen des LogFiles
$Logfile = (New-Item ("$LogPfad\$Datum" + "Retour am.txt") -ItemType File -Force).FullName
# Überschrift für das LogFile
Add-Content $Logfile ("In alten Zustand versetzt am $(get-date -Format "dddd, dd. MMMM yyyy, HH:mm:ss") Uhr`n")
# Leerzeilen einfügen
Add-Content $Logfile "`n`n"
}
Alles anzeigen
Gutes Gelingen!
Gutes Gelingen!
Danke für deine ausführliche Erklärung, und die Herstellung der Skripte
Danke für deine ausführliche Erklärung, und die Herstellung der Skripte
Gerne doch, Andreas, wir haben es ja beide ausgiebig getestet.
Du nutzt in den PowerShellScripten den absoluten Pfad zum Profil.
Geht es nicht auch mit %appdata%?
Also z.B. für das Profil : "C:\%appdata%\Mozilla\Firefox\Profiles\ehrfnvh7.Test"
Ist ja nur so eine Idee.
Geht es nicht auch mit %appdata%?
Das müsste wohl auch funktionieren, denke ich, habe es aber nicht ausprobiert.
Wie ich ja beschrieben habe, suche ich bei installierten Versionen immer den Pfad über about:support, kopiere den einfach und füge ihn ein.
Edit:
Funktioniert nicht, Script gibt Error aus.
Geht es nicht auch mit %appdata%?
Habe es gerade getestet, funktioniert nicht!
Habe es gerade getestet, funktioniert nicht!
Stimmt, es muss also der absolute Pfad eingetragen werden. Auch danke für die Bestätigung.
Jetzt habe ich es!
Danke, das funktioniert tadellos.
In meinen PowerShell-Aufzeichnungen läuft das Script so ohne Fehler durch.
Aber ich werde wohl beim Ursprung bleiben, ist wegen der portablen Versionen dann einheitlich.
Habe noch etwas gebastelt.
$date = Get-Date -Format "dd.MM.yyyy" z.B. in Zeile 1 einfügen.
dann in Zeile 33
$Logfile = (New-Item ("$LogPfad\$Datum" + "Sicherung am.txt") -ItemType File -Force).FullName
in
$Logfile = (New-Item ("$LogPfad\$Datum" + "Sicherung am $date.txt") -ItemType File -Force).FullName
ändern.
Das Ergebnis ist, dass anstatt eine Datei Sicherung am.txt
eine z.B. Sicherung am 14.01.2023.txt erzeugt wird.
C:\%appdata%\
Das dürfte auch nicht funktionieren, weil %appdata% allein schon auf Laufwerk C verweist. Damit wäre in deinem Fall C:\ doppelt gemoppelt.
Bei mir wird %appdata% zu C:\Users\DenalB\AppData\Roaming.
Eine weitere kleine Spielerei!
New-Item -Path "E:\BackupFirefox\$date" -ItemType Directory
Compress-Archive -Path "$env:appdata\Mozilla\Firefox\Profiles\ehrfnvh7.Test" -DestinationPath "E:\BackupFirefox\$date\ehrfnvh7.Test.zip"
Ich habe zwar herausgefunden, wie der laufende Prozess beendet wird,
aber mit dem Prüfen, bzw if... else komme ich noch nicht so zurecht.
Auch wäre es ja klasse, wenn der Firefox dann neu gestartet wird,
bzw. eine Abfrage, ob er es denn soll.
Besser: abfragen, ob Firefox noch läuft und solange warten oder abbrechen.
Das ist nämlich einer der gravierenden Fehler in Firesave.
ehrfnvh7.Test
Wer denkt sich solche Profilnamen aus?
Warum nicht nur "Test"?
Steht eh alles in der profiles.ini, jede Malware kann das inzwischen auslesen, da sind die anderen Zeichen davor komplett pillepalle.
PS kann auch INI auslesen.
Ist mit höheren Sprachen aber noch einfacher umzusetzen.
Wer denkt sich solche Profilnamen aus?
Ich behaupte mal , Firefox, denn ich hatte hier z.B. nur "Test" als Name vergeben. Wie machst Du es denn?