使用变量将文件从一个位置复制到多个使用 Powershell

Using a Variable to Copy Files From One Location to Multiple Using Powershell

所以我有一个文件,我想使用 powershell 从一个位置传输到我网络上的多台计算机,这就是我目前所拥有的。

robocopy "\PTFGW-061403573\c$\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" 
"\$onlineComputers\c$\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" /mir /r:1 /o:0

当我 运行 它说找不到位置时,我可以确认该变量包含其中的所有在线计算机。有什么想法吗?

试试这个

$onlineComputers = "Computer1","ComputerN"
$onlineComputers | Foreach {
 & robocopy.exe --% "\PTFGW-061403573\c$\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" 
"\$($_)\c$\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" /mir /r:1 /o:0
}

您需要对集合中的每一项执行 foreach 并将 $onlineComputers 指定为数组。并更正确地将停止解析 (--%) 符号添加到 运行 命令。这是可选的,也是为了安全。

Zizzay,

这里有一些代码可以满足您的需求。它将 copy-item 命令放在 TRY/Catch 构造中,以捕获并报告复制过程中的任何错误。我假设源 (Startup) 上的最后一项是一个文件夹,因此需要 $CIArgs 中的 Recurse 参数。如果它不是文件夹,请删除 Recurse 行。我还打破了你的路径以减少重复并使事情更容易改变。注意:我在对等 LAN 上对此进行了测试,应该可以在基于域的 LAN 上工作。

$onlineComputers = "Computer1","ComputerN"
$FSBase = "C$\ProgramData\Microsoft\Windows\Start Menu\Programs"

$OnlineComputers  | 
   ForEach-Object {

 Try {
        $CIArgs = 
          @{Path        = "\PTFGW-061403573$FSBase"
            Destination = "\$_.$FSBase\Startup"
            Force       = $True
            Recurse     = $True
            ErrorAction = 'Stop'}
        Copy-Item @CIArgs
       }
       Catch {
             Write-Host @"
Could not write to: $_.
"@
       } #End Catch

} #End ForEach...

HTH