Powershell, mit FOR-Schleife Verzeichnise kopieren
Hallo zusammen,
ich suche nach einer Möglichkeit, mein Sicherungsskript noch besser zu machen.
Stand jetzt:
Das geht doch bestimmt auch "schöner", ich finde nur nicht wie.
Ich habe es so versucht:
komme aber leider nicht weiter.
Über Tips würde ich mich sehr freuen.
VG
ich suche nach einer Möglichkeit, mein Sicherungsskript noch besser zu machen.
Stand jetzt:
$var = "c:\tools\Variabeln.txt"
$lines = Get-Content $var # C:\Tools
$lines[0] # Quelle
$lines[1] # Quelle
# $lines[2] # Quelle
# $lines[3] # Quelle
# $lines[4] # Quelle
# $lines[5] # Quelle
Copy-Item -Path $lines[0] -Destination $ziel_DA -Recurse
Copy-Item -Path $lines[1] -Destination $ziel_DA -Recurse
Copy-Item -Path $lines[2] -Destination $ziel_DA -Recurse
Das geht doch bestimmt auch "schöner", ich finde nur nicht wie.
Ich habe es so versucht:
$Zeile = (Get-Content 'c:\tools\Variabeln.txt').Length
$var = "c:\tools\Variabeln.txt"
$lines = Get-Content $var # C:\Tools
$lines[0] # Quelle
$lines[1] # Quelle
$lines[2] # Quelle
$lines[3] # Quelle
$lines[4] # Quelle
$lines[5] # Quelle
$W = 0
foreach ($Zeile in $W)
{
Write-Host "Copy"+$lines[$W]
pause
}
Über Tips würde ich mich sehr freuen.
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 63696120746
Url: https://administrator.de/contentid/63696120746
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
12 Kommentare
Neuester Kommentar
Oder gleich ohne Schleife
Path erlaubt ein Array an Pfadangaben
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...
Copy-Item -Path $lines -Destination $ziel_DA -Recurse
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...
Was steht denn überhaupt in "c:\tools\Variabeln.txt" ?
Klappt hier problemlos wenn in der Textdatei Pfade zu Ordnern enthalten sind.
Demo hier
https://tio.run/##bY5NC8IwEETv@RVL6DUN9i4UFLyKB@9pu9JgzJZkgx/432ttCy3odR ...
Klappt hier problemlos wenn in der Textdatei Pfade zu Ordnern enthalten sind.
Demo hier
https://tio.run/##bY5NC8IwEETv@RVL6DUN9i4UFLyKB@9pu9JgzJZkgx/432ttCy3odR ...
Siehe Beispiel das es einwandfrei klappt, Zielordner muss existieren ansonsten im Skript anlegen. Entsprechende Rechte in den Ordnern ebenfalls.
Ohne Fehlermeldung kann man dir nicht helfen ... Das man das hier noch erwähnen muss ist schon traurig.
Ohne Fehlermeldung kann man dir nicht helfen ... Das man das hier noch erwähnen muss ist schon traurig.
Dann ist deine PowerShell zu alt oder das Skript nicht im richtigen Encoding gespeichert (UTF-8 with BOM) oder die Textdatei hat ein Encoding das vom Standard abweicht (hier dann das Encoding der Datei mit dem -Encoding Parameter definieren) .
Servus,
die Frage war ja "wie es schöner" gehen könnte
Ich würde einige Dinge anders lösen, zum Beispiel das ich meine Backups nicht mit PowerShell mache, aber nun denn.
Ich würde es nicht mit Textfiles machen, die sind für das Einlesen immer so "naja"
Schöner und modern klappt das ganze mit JSON-Files.
PS-Copy Skript:
Dazugehöriges JSON:
Im JSON-File kannst Du nach unten gezeigter Form immer weitere Blöcke hinzufügen, welche die Schleife durchlaufen sollen.
Wenn Du weitere Parameter brauchst, kannst Du diese ebenfalls im jeweiligen Block hinzufügen. Ich nutze z.B. immer Kommentar-Parameter, welche nicht aber nicht weiter auswerte, da JSON selbst keine Kommentare kennt.
Wichtig ist bei Pfadangaben in JSON allerdings, dass du mit "//" statt "/" arbeiten musst, da ein Slash als Escape-Character gilt.
Wenn Du das grundlegende Prinzip einmal verstanden hast ist es deutlich angenehmer damit zu arbeiten, als mit irgendwelchen Textfiles, die keinerlei Struktur kennen.
die Frage war ja "wie es schöner" gehen könnte
Ich würde einige Dinge anders lösen, zum Beispiel das ich meine Backups nicht mit PowerShell mache, aber nun denn.
Ich würde es nicht mit Textfiles machen, die sind für das Einlesen immer so "naja"
Schöner und modern klappt das ganze mit JSON-Files.
PS-Copy Skript:
# Backups aus JSON laden
$sourcesjson = Get-Content -Path "C:\Temp\filecopyscript\sources.json" | ConvertFrom-Json
# Durchführung Kopiervorgänge
foreach ($backupitem in $sourcesjson.backupitem) {
$src = $backupitem.src
$dst = $backupitem.dst
#Kopiervorgang
Copy-Item -Path $src -Destination $dst -recurse -Force -Verbose
}
Dazugehöriges JSON:
{
"backupitem": [
{
"_comment": "Backup 01",
"src": "C:\\Temp\\filecopyscript\\Test\\SRC1",
"dst": "C:\\Temp\\filecopyscript\\Test\\DST1"
},
{
"_comment": "Backup 02",
"src": "C:\\Temp\\filecopyscript\\Test\\SRC2",
"dst": "C:\\Temp\\filecopyscript\\Test\\DST2"
},
{
"_comment": "Backup 02",
"src": "C:\\Temp\\filecopyscript\\Test\\SRC3",
"dst": "C:\\Temp\\filecopyscript\\Test\\DST3"
}
]
}
Im JSON-File kannst Du nach unten gezeigter Form immer weitere Blöcke hinzufügen, welche die Schleife durchlaufen sollen.
Wenn Du weitere Parameter brauchst, kannst Du diese ebenfalls im jeweiligen Block hinzufügen. Ich nutze z.B. immer Kommentar-Parameter, welche nicht aber nicht weiter auswerte, da JSON selbst keine Kommentare kennt.
Wichtig ist bei Pfadangaben in JSON allerdings, dass du mit "//" statt "/" arbeiten musst, da ein Slash als Escape-Character gilt.
Wenn Du das grundlegende Prinzip einmal verstanden hast ist es deutlich angenehmer damit zu arbeiten, als mit irgendwelchen Textfiles, die keinerlei Struktur kennen.