Использование переменной для копирования файлов из одного места в несколько с помощью Powershell - PullRequest
1 голос
/ 13 июля 2020

Итак, у меня есть файл, который я хочу перенести из одного места на несколько компьютеров в моей сети с помощью PowerShell, это то, что у меня есть. не найден, и я могу подтвердить, что эта переменная содержит все подключенные к ней компьютеры. есть идеи?

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Zizzay,

Вот код, который должен делать то, что вы хотите. Он помещает команду copy-item в конструкцию TRY / Catch, чтобы отловить и сообщить о любых ошибках в процессе копирования. Я предположил, что последний элемент вашего источника (Startup) - это папка, поэтому необходим аргумент Recurse в $ CIArgs. Если это не папка, удалите строку Recurse. Я также разбил ваши пути, чтобы сократить количество повторений и упростить изменение. Примечание: я тестировал это в одноранговой локальной сети, должно работать в локальной сети на основе домена.

$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

0 голосов
/ 13 июля 2020

Попробуйте это

$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 в виде массива. И добавил символ остановки анализа (-%) для более правильного выполнения команды. Это необязательно и в целях безопасности.

...