keinm3nsch
Goto Top

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?


$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
}

Content-ID: 64234400585

Url: https://administrator.de/contentid/64234400585

Ausgedruckt am: 23.11.2024 um 08:11 Uhr

erikro
erikro 22.08.2024 um 14:51:57 Uhr
Goto Top
Moin,

works as designed. face-wink

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
KeinM3nsch
KeinM3nsch 23.08.2024 um 12:37:06 Uhr
Goto Top
Funktioniert leider nicht. Der Ordner wird weiterhin nicht verschoben, aber gelöscht.
Ich nutze keinen absoluten Pfad, da viele Nutzer auf die virtuellen Clients zugreifen und sich die Nutzer auch immer wieder ändern. Dann müsste ich jedes Mal das Skript anpassen.
14260433693
Lösung 14260433693 25.08.2024 aktualisiert um 12:32:11 Uhr
Goto Top
# 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  
    }
}

🖖
KeinM3nsch
KeinM3nsch 29.08.2024 um 09:38:26 Uhr
Goto Top
Funktioniert einwandfrei, danke!