使用变量将文件从一个位置复制到多个使用 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
所以我有一个文件,我想使用 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