Powershell - Ordner und Dateien beim Kopieren und Löschen ausschließen
Hallo zusammen,
ich möchte auf Laptops und virtuellen Clients (Win10) per PS-Skript Dateien aus den Ordnern Downloads und Dokumente der einzelnen Nutzer Kopieren. Dazu werden die jeweiligen Nutzer aus einer .csv-Datei eingelesen und der entsprechende Pfad zusammengesetzt. Das Kopieren in einen neuen Desktop-Ordner und das anschließende Löschen der Dateien in Downloads und Dokumente funktioniert soweit, jedoch möchte ich nun einen Ordner in Dokumente ausschließen. Ich habe es mit -Exclude versucht, der Ordner an sich bleibt auch später erhalten, aber der Inhalt wird gelöscht. Wie kann ich das Problem beheben?
ich möchte auf Laptops und virtuellen Clients (Win10) per PS-Skript Dateien aus den Ordnern Downloads und Dokumente der einzelnen Nutzer Kopieren. Dazu werden die jeweiligen Nutzer aus einer .csv-Datei eingelesen und der entsprechende Pfad zusammengesetzt. Das Kopieren in einen neuen Desktop-Ordner und das anschließende Löschen der Dateien in Downloads und Dokumente funktioniert soweit, jedoch möchte ich nun einen Ordner in Dokumente ausschließen. Ich habe es mit -Exclude versucht, der Ordner an sich bleibt auch später erhalten, aber der Inhalt wird gelöscht. Wie kann ich das Problem beheben?
$csv = Import-CSV '\\SERVER\usernames.csv' #CSV-Datei mit Usernamen einlesen
$csv | %{
$source = Join-Path 'C:' -ChildPath 'Users' | Join-Path -ChildPath $_.username | Join-Path -ChildPath 'Documents\*' #Quellpfad1 Dokumente zusammensetzen
$destination = Join-Path 'C:' -ChildPath 'Users' | Join-Path -ChildPath $_.username | Join-Path -ChildPath 'Desktop' #Zielpfad Desktop zusammensetzen
New-Item -ItemType Directory -Path $destination -Name "Ordner auf Desktop" | Out-Null #Neuer Ordner auf Desktop erstellen
$destination2 = Join-Path 'C:' -ChildPath 'Users' | Join-Path -ChildPath $_.username | Join-Path -ChildPath 'Desktop' | Join-Path -ChildPath 'Ordner auf Desktop' #Zielpfad2 zusammensetzen
Get-ChildItem $destination2 | ForEach-Object {Copy-Item -Path $source -Exclude 'Ordner' -Destination $destination2 -Force -Recurse}
Copy-Item -Path $source -Destination $destination2\Documents -Force #Dateien aus Dokumente kopieren, Ordner ausschließen
$source2 = Join-Path 'C:' -ChildPath 'Users' | Join-Path -ChildPath $_.username | Join-Path -ChildPath 'Downloads' #Quellpfad2 Downloads zusammensetzen
Get-ChildItem $destination2 | ForEach-Object {Copy-Item -Path $Source2 -Destination $destination2 -Force -Recurse}
Copy-Item -Path $source2 -Destination $destination2 -Force #Dateien aus Downloads kopieren
Remove-Item $source -Exclude 'Ordner' -Recurse #Löschen der Dateien aus Dokumente, Ordner ausschließen
Remove-Item $source2\* -Recurse #Löschen der Dateien aus Downloads
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 64234400585
Url: https://administrator.de/contentid/64234400585
Ausgedruckt am: 23.11.2024 um 08:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
works as designed.
Kopiert und löscht alles außer dem Ordner.
Kopiert und löscht alles außer dem Ordner und seinen Inhalt.
BTW: In Skripten sollte man immer mit absoluten Pfaden arbeiten, da man nie sicher sein kann, welches das working directory ist. Also besser:
hth
Erik
hth
Erik
works as designed.
copy-item * -exclude "directory" -recurse
remove-item * -exclude "directory" -recurse
Kopiert und löscht alles außer dem Ordner.
copy-item * -exclude "directory\*" -recurse
remove-item * -exclude "directory\*" -recurse
Kopiert und löscht alles außer dem Ordner und seinen Inhalt.
BTW: In Skripten sollte man immer mit absoluten Pfaden arbeiten, da man nie sicher sein kann, welches das working directory ist. Also besser:
copy-item c:\woauchimmer -exclude "c:\woauchimmer\wasauchimmer\*" -recurse
hth
Erik
hth
Erik
# import
$csv = Import-CSV '\\SERVER\usernames.csv'
# alle zeilen durchlaufen
foreach($line in $csv){
# quellordner
$source_documents = "C:\Users\$($line.Username)\Documents"
$source_downloads = "C:\Users\$($line.Username)\Downloads"
# zielordner
$destination_documents = "C:\Users\$($line.Username)\Desktop\Ordner auf Desktop\Documents"
$destination_downloads = "C:\Users\$($line.Username)\Desktop\Ordner auf Desktop\Downloads"
# prüfe ob Quellordner existieren
if (Test-path $source_documents -PathType Container){
# zielordner erstellen falls nötig
if (!(Test-Path $destination_documents -PathType Container)){
New-Item -ItemType Directory -Path $destination_documents -Force | out-null
}
# Dokumente in den Zielordner verschieben (den Ordner "Ordner" ausnehmen und am Ort belassen)
move-item "$source_documents\*" -Exclude 'Ordner' -Destination $destination_documents -Force -EA 0
}
if (Test-path $source_downloads -PathType Container){
# zielordner erstellen falls nötig
if (!(Test-Path $destination_downloads -PathType Container)){
New-Item -ItemType Directory -Path $destination_downloads -Force | out-null
}
# Downloads in den Zieloder verschieben
move-item -Path "$source_downloads\*" -Destination $destination_downloads -Force
}
}
🖖