invoke-команда powershell возвращается после завершения

Я хотел бы параллельное копирование, используя robocopy и возвращая данные журнала, когда это будет сделано.

если бы я использовал invoke-command server1,server2,server3 { robocopy }, он выплевывает журналы во время копирования $1, $2, $3, это становится очень запутанным и трудным для чтения. Есть ли способ получить журнал или информацию о ходе выполнения после завершения копирования?

например:

server3 done.. display all copied files
server1 done.. display all copied files
server2 done.. display all copied files

вместо

$3 display copied files
server1 display copied files
server2 display copied files
server2 display copied files
server1 display copied files
server2 display copied files

Я знаю, что мог бы использовать runspace для нескольких потоков и проверить завершение для дескриптора для отображения данных (которые я в настоящее время использую). но я хотел бы знать, можно ли сделать то же самое с invoke-command и это проще:).

Спасибо

1 ответ

Решение

Чтобы расширить мой комментарий, вы можете создать желаемое действие в виде блока сценария, используйте -AsJob параметр для создания фоновых заданий для действий копирования, затем дождитесь завершения заданий и выведите результаты после их завершения.

$SB = {
    & robocopy \\FileServer\Share\KittenPictures C:\webroot\MySite\Images *.*
}
$Servers = ('ServerA','ServerB','ServerC')
$Jobs = Invoke-Command -ScriptBlock $SB -ComputerName $Servers -AsJob
While($Jobs.JobStateInfo -Contains Running){
    $Jobs | Wait-Job -Any
    Get-Job -State Completed | ForEach{
        $_ | Receive-Job
        $_ | Remove-Job
    }
}
Другие вопросы по тегам