Powershell从不同目录复制文件

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