使用来自多个服务器的powershell进行远程文件复制并重命名

时间:2017-05-29 04:12:05

标签: powershell copy rename

这个社区的新手和PowerShell的新手。 我的任务是整理每个文件服务器中的文件。

我需要复制此文件,然后将其重命名为它来自的服务器名称。

到目前为止我已经弄清楚了这一点;

$ListOfServers = Get-Content "C:\Temp\TEST.txt"
Copy-Item "\\$ListOfServers\c$\utils\TSM\baclient\dsmsched.log" -Destination "C:\temp\Testtest.txt"

在我的TEST.txt文件中,我有一个要复制文件的服务器列表,但当我输入多个服务器名称时,它不会从中复制文件,当我将TEST.txt文件恢复为一个服务器它确实复制好。我也想将我提取的LOG文件重命名为它来自的服务器的名称。

这里的任何帮助都不仅仅是值得赞赏的。

提前致谢。 MV

2 个答案:

答案 0 :(得分:0)

当您在文件中放置多个服务器名称时,$ListOfServers是一个名称数组(实际上是文件行)。

当您使用"$a"语法将数组放入字符串中时,内容会与它们之间的空格串在一起,因此您的副本将变为"\\server1 server2 server3\c$\utils\.."并且无效。

您需要使用循环,例如

Get-Content "C:\Temp\TEST.txt" | ForEach-Object {

    Copy-Item "\\$_\c$\utils\TSM\baclient\dsmsched.log" -Destination "C:\temp\Testtest-$_.txt"

}

循环变量$_是行/服务器名称,我也将服务器名称也放在目标文件名中。

答案 1 :(得分:0)

很难理解你想要描述的内容。我个人通常会把这样的东西放在for循环中,但我并不完全确定它是必要的。如果您想保留每个服务器的文件,并且您没有这样做,那么您肯定需要一个唯一的目标。您可以在目的地处理重命名。 尝试将-destination设置为c:\ temp \ $ serverfromforloop-testtest.txt