Powershell copy files from different directories
我有一个脚本,可以将文件从一台服务器复制到另一台服务器。
我基本上要从3个不同的服务器位置进行复制,并在另一台服务器上为源中每个位置及其内部内容创建一个文件夹。
我做到了,但是我为每个源和每个文件夹/目标声明了一个变量。
我想创建一个变量,然后该变量将自动获取源的每个位置,并将所有内容复制到正确的位置。
会定义$ server = " \\\\\\\\ path1,\\\\\\\\ path2,\\\\\\\\ path3 "这样做,它会进入foreach循环吗?并遍历路径的每个部分并复制并粘贴?
如果是这样,如果我有1个文件夹,其中3个子文件夹分别对应一个源,则该如何定义目标。
例如\\\\\\\\ path1应该总是将项目放在path1destination中,\\\\\\\\ path2应该始终将项目放在path2destination中,依此类推。基本上,我想以某种方式使每个源路径具有特定的路径目标相关联,并且所有内容都应使用尽可能少的变量。
任何人都可以提供有关如何解决此问题的想法?我的代码可以工作,但是我必须定义$ path1,$ path2,$ path3等,然后在每个路径上进行循环,这虽然不错,但我需要使其简洁且代码行少。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $server1 ="C:\\Users\ icolae.calimanu\\Documents\\B" $server2 ="C:\\Users\ icolae.calimanu\\Documents\\A" # UNC Path. $datetime = Get-Date -Format"MMddyyyy-HHmmss" $server3 ="C:\\Users\ icolae.calimanu\\Documents\\C" # UNC Path. foreach ($server1 in gci $server1 -recurse) { Copy-Item -Path $server1.FullName -Destination $server2 } ForEach ( $server2 in $server2 ) { $curDateTime = Get-Date -Format yyyyMMdd-HHmmss Get-ChildItem $server2 -Recurse | Rename-Item -NewName {$_.Basename + '_' + $curDateTime + $_.Extension } } foreach ($server2 in gci $server2 -Recurse) { Move-Item -path $server2 -destination"C:\\Users\ icolae.calimanu\\Documents\\C" } |
使用哈希表为每个源和目标创建键值存储。像这样,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # Create entries for each source and destination $ht = @{} $o = new-object PSObject -property @{ from ="\\\\serverA\\source" to ="\\\\serverB\\destination" } $ht.Add($o.from, $o) $o = new-object PSObject -property @{ from ="\\\\serverC\\source" to ="\\\\serverB\\destination2" } $ht.Add($o.from, $o) $o = new-object PSObject -property @{ from ="\\\\servera\\source2" to ="\\\\serverC\\destination" } $ht.Add($o.from, $o) # Iterate the collection. For demo, print the copy commands foreach($server in $ht.keys) { $cmd = $("copy-item {0} {1}" -f $ht.Item($server).from, $ht.Item($server).to); $cmd } # Sample output copy-item \\\\serverA\\source \\\\serverB\\destination copy-item \\\\servera\\source2 \\\\serverC\\destination copy-item \\\\serverC\\source \\\\serverB\\destination2 |