@k4nt

PS: out-file оставляет 2 запись. Почему?

Есть мини скрипт по тасканию файлов туда-сюда раз в N времени.

# Копирование файлов из папки bl для дальнейшей синхронизации
    # Принцип работы:
    # Из целевой папки берутся файлы по шаблону.
    # Так как файлов много с разными названиями - берётся по маске даты, времени и общих символов.
    # Это позволит при добавлении файлов с иным началом копировать их без вмешательства в скрипт.
    # После собираются данные о количестве файлов в источнике и целевой папке в отдельный файл.
	#

# Папка откуда копируются файлы
$copyFrom = "E:\bl\"
# Папка куда скопировать файлы
$copyTo = "\\bl_x\c\bl\" + (Get-Date -format yyyy-MM-dd-HH-mm)

# Сохраняем время для создания отчёта сейчас
	# Так как копирование происходит с задержкой- нужно сохранить время заранее. Оно используется в маске поиска.
$mask = "*" + (Get-Date -format yyyy-MM-dd-HH-mm) + "*"

	# Собираем шаблон удаляемого каталога N дней назад. 
		# Для изменения нужно заменить числов в AddDays(-1). Сейчас хранится 1 день.
	#$delFolder = $copyTo + (Get-Date).AddDays(-1).ToString('yyyy-MM-dd-HH-mm')

# Файлы создаются с 8:00 до 23:00
# Проверяем время что бы не делать лишних пустых папок
# Время больше 7 часов
if ((Get-Date).Hour -gt 7)
{
	# Время меньше 23 часов
	if ((Get-Date).Hour -le 23)
	{
		# Создаём папку для новых файлов с датой и временем
		New-Item -Path $copyTo -ItemType Directory

		# Собираем шаблон названия файла
			# Любое начало + _log_ 
			# + Год
			# + Месяц
			# + День
			# + час + любые символы
		$file = $copyFrom + "*_log_" + (Get-Date -format yyyy-MM-dd-HH-mm) + "*"

		# Ждём некоторое время, что бы все файлы успели создаться.
		sleep -s 300

		# Копирование файлов в целевую папку.
		Copy-Item -Path $file -Destination $copyTo
		
		# Удаление устаревших файлов
		#Remove-Item -Path $delFolder -Recurse
	}
	else
	{
		# Время 23 часа, но меньше 15 минут. Последние файлв в 23:00
		if (((Get-Date).Hour -eq 23) -and ((Get-Date).Minute -lt 15))
		{
					New-Item -Path $copyTo -ItemType Directory
					$file = $copyFrom + "*_log_" + (Get-Date -format yyyy-MM-dd-HH-mm) + "*"
					sleep -s 300
					Copy-Item -Path $file -Destination $copyTo
					#Remove-Item -Path $delFolder -Recurse
		}
	}
}

sleep -s 30

# Создание отчёта о скопированных файлах.
	# Считаем количество переданых файлов
$fileInGWD = (Get-ChildItem $copyTo -Filter $mask).Count
	# Считаем количество исходных файлов
$fileInMistral2 = (Get-ChildItem $copyFrom -Filter $mask).Count
	# Создание отчёта о переданых файлах
$report = (Get-Date -format yyyy-MM-dd-HH-mm) + ": Передано " + $fileInGWD + " из " + $fileInMistral2 + " файлов."
	# Указываем путь до файла с отчётами
$reportFile = "\\bl_x\c\bl\" + (Get-Date -format yyyy-MM-dd) + ".txt"
	# Передаём отчёт в файл
$report | out-file -filepath $reportFile -append -width 200


По каким-то причинам в период работы скрипта (If отрабатывает) "$report | out-file -filepath $reportFile -append -width 200" оставляет 2 записи: одну когда ещё не все передалось, вторую когда всё передалось. Когда if не отрабатывает - всего одну.

Что я хочу: я хочу всегда 1 запись. Кто знает в чём причина и куда копать?
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы