web-dev-qa-db-fra.com

Copier des fichiers dans des dossiers et des sous-dossiers dans la même structure de répertoires du serveur source à l'aide de PowerShell

J'ai beaucoup de mal à faire en sorte que ce script ci-dessous fonctionne pour copier les fichiers dans des dossiers et des sous-dossiers dans la structure appropriée (en tant que serveur source).

Disons qu'il existe des dossiers mentionnés ci-dessous:

Dossier principal: fichier aaa, fichier bbb

Sous-dossier a: fichier 1, fichier 2, fichier 3

Sous-dossier b: fichier 4, fichier 5, fichier 6

Script utilisé:

Get-ChildItem -Path \\Server1\Test -recurse | ForEach-Object {
Copy-Item -LiteralPath $_.FullName -Destination \\server2\test |
Get-Acl -Path $_.FullName | Set-Acl -Path "\\server2\test\$(Split-Path -Path $_.FullName -Leaf)"

}

Sortie: Fichier aaa, fichier bbb

Sous-dossier a (dossier vide)

Sous-dossier b (dossier vide)

Fichier 1, fichier 2, fichier 3, fichier 4, fichier 5, fichier 6.

Je veux que les fichiers soient copiés dans leurs dossiers respectifs (comme les dossiers sources). Toute aide supplémentaire est hautement appréciée.

25
user1926332

Cela peut être fait simplement en utilisant Copy-Item. Pas besoin d'utiliser Get-Childitem. Je pense que tu réfléchis trop.

Copy-Item -Path C:\MyFolder -Destination \\Server\MyFolder -recurse -Force

Je viens de le tester et cela a fonctionné pour moi.

55
Kevin_

une fois, j'ai trouvé ce script, ce dossier de copie et les fichiers tout en conservant la même structure de la source dans la destination. Vous pouvez faire quelques essais avec cela.

# Find the source files
$sourceDir="X:\sourceFolder"

# Set the target file
$targetDir="Y:\Destfolder\"
Get-ChildItem $sourceDir -Include *.* -Recurse |  foreach {

    # Remove the original  root folder
    $split = $_.Fullname  -split '\\'
    $DestFile =  $split[1..($split.Length - 1)] -join '\' 

    # Build the new  destination file path
    $DestFile = $targetDir+$DestFile

    # Move-Item won't  create the folder structure so we have to 
    # create a blank file  and then overwrite it
    $null = New-Item -Path  $DestFile -Type File -Force
    Move-Item -Path  $_.FullName -Destination $DestFile -Force
}
1
Aratan

Si vous souhaitez mettre en miroir le même contenu de la source à la destination, essayez-en un.

function CopyFilesToFolder ($fromFolder, $toFolder) {
    $childItems = Get-ChildItem $fromFolder
    $childItems | ForEach-Object {
         Copy-Item -Path $_.FullName -Destination $toFolder -Recurse -Force
    }
}

Tester:

CopyFilesToFolder "C:\temp\q" "c:\temp\w"
0
Teoman shipahi