Задача синхронизировать одну папку со множеством сервером. Делается это для распространения базы Касперского на удалённые площадки.
function Write-Log { param ( [string]$Message ) # Получение текущей даты и времени $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" # Форматирование сообщения в формате "дата время: сообщение" $logMessage = "{0}: {1}" -f $timestamp, $Message # Запись сообщения в лог-файл $logMessage | Out-File -FilePath "D:\Programs\replica_kasper\Log.txt" -Append } # Установите модуль PSParallel, если у вас его нет if (-not (Get-Module -Name PSParallel -ListAvailable)) { Install-Module PSParallel -Scope CurrentUser } # Загрузите модуль PSParallel Import-Module PSParallel # Получение списка серверов из AD $servers = Get-ADComputer -Filter {OperatingSystem -like "*Server*" -and Enabled -eq $true -and Name -like "*FSR*" } | Select-Object -ExpandProperty Name # Путь к исходной папке на первом сервере $sourceFolderPath = "\\fsr\с$\Distrib" # Путь к целевой папке на других серверах $targetFolderPath = "\Distrib" # Параметры Robocopy для синхронизации $robocopyParams = '/MIR /COPY:DT /Z /XA:H /W:5 /MT:20 /XD "DfsrPrivate" /XJD /TEE ' # Workflow для параллельной синхронизации папок с проверкой доступности сервера workflow Sync-Folders { param ($servers, $sourceFolderPath, $targetFolderPath, $robocopyParams) foreach -parallel ($server in $servers) { # Проверка доступности сервера if (Test-Connection -ComputerName $server -Count 1 -Quiet) { # Запуск Robocopy для синхронизации папок $robocopyArgs = "$sourceFolderPath \\$server$targetFolderPath $robocopyParams /LOG+:D:\Programs\replica_kasper\log_$server.txt" Start-Process -FilePath "robocopy.exe" -ArgumentList $robocopyArgs -Wait Write-Log "Синхронизация папок на сервере $server завершена" } else { Write-Log "Сервер $server недоступен. Синхронизация папок не выполнена." } } } # Вызов workflow с аргументами Sync-Folders -servers $servers -sourceFolderPath $sourceFolderPath -targetFolderPath $targetFolderPath -robocopyParams $robocopyParams
Если этот скрипт добавить в task scheduler то будет ошибка
Task Scheduler did not launch task "\kasper replica" because instance of the same task is already running.
Что бы исправить надо в настройках поставить Run a new instance in parallel
Similar Posts:
- Как сбросить терминальные сессии на терминальной ферме RDS windows 2012-2016 без прав администратора
- Как делегировать права управления терминальных сессий не давая полные права на сервер в windows 2012/16
- Как завершить сессию на всех серверах в локальной сети.
- Как удалить из папки файлы с серверов ad им перезапустить службу.
- Как сбросить все зависшие или в состоянии disconnect сессии в rpd rds ferma со всех хостов разом.