@fbi_suck
Эникей

Где ошибка в скрипте powershell?

С помощью chatgpt сделал такой скрипт powershell.
По задумке он должен записывать дату изменения файлов в каталоге в текстовые файлы и при последующих запусках сравнивать и создавать файл backup.need если даты различаются, но он почему то всегда создает этот файл backup.need? как будто есть различия в дате изменения всех файлов в каталоге. Думал разные форматы времени и пробовал менять написание в 24 строке, но ничего не изменилось. Сам в powershell почти не разбираюсь и наладка мне дается тяжело. Подскажите пожалуйста в чем проблема или куда копать?

# Путь к каталогу с файлами
$sourcePath = "D:\_WORK\"
# Путь к каталогу для сохранения даты изменения файлов
$datePath = "T:\RAID_BACKUP\dates"
# Путь к каталогу для создания файла backup.need
$backupPath = "T:\RAID_BACKUP\Scripts1"

# Получаем список файлов из каталога $sourcePath
$files = Get-ChildItem $sourcePath

# Перебираем каждый файл
foreach ($file in $files) {
	    # Формируем путь к файлу с датой изменения
    $dateFilePath = Join-Path -Path $datePath -ChildPath "date_$($file.Name).txt"
        # Проверяем, существует ли файл с датой изменения
    if (Test-Path $dateFilePath) {
		        # Считываем дату изменения из файла
        $savedDate = Get-Content $dateFilePath
 # 23 строка Проверяем, совпадает ли сохраненная дата с текущей датой изменения файла
		if ($savedDate -ne  $file.LastWriteTime.ToString("yyyy/MM/dd HH:mm:ss")) {
        		
            # Создаем файл backup.need в указанном каталоге
            New-Item -Path $backupPath -Name "backup.need" -ItemType File -Force
        }
    }
    else {
        # Создаем файл с датой изменения, если он не существует
        $file.LastWriteTime | Out-File -FilePath $dateFilePath
    }    
    # Обновляем дату изменения в файле
    $file.LastWriteTime | Out-File -FilePath $dateFilePath -Force
}


24 строку пробовал менять на эти варианты

#	if ($savedDate -ne  $file.LastWriteTime.ToString()) {	
#	if ($savedDate -ne  ((Get-Item $file).LastWriteTime)) {
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
@BeatHazard
Вам нужно привести сравниваемые даты к одному формату, например указать значение переменной $savedDate таким образом:
$savedDate = get-date $(Get-Content $dateFilePath)[1] -Format "yyyy/MM/dd HH:mm:ss"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы