Операция MOVE в сценарии PS не работает уже несколько недель; исходные файлы удалены, но не записаны в новое место. Они подлежат восстановлению?

У нас есть сценарий, который должен был переместить файлы LOG с сервера в локальный репозиторий. Оказалось, что автор сценария случайно добавил апостроф в пункте назначения:

      MOVE /y "C:\XXX\XXX\XXX\audit.*.log" "\\[FQDN]\XXX`$\XXX\XXX\XXX"

(Обратите внимание на апостроф перед знаком доллара)

Файлы журналов исчезли с сервера и, предположительно из-за опечатки, не появились на сервере репозитория.

Сторонний поставщик, который контролирует сервер, также упомянул, что, похоже, жесткий диск заполняется, что соответствует размеру отсутствующих файлов журнала (около 500 МБ каждый, ежедневно в течение последних 6 недель).

Вопрос: можно ли восстановить эти недостающие файлы журналов? Хранит ли Windows файлы, полученные в результате операции MOVE, где-нибудь в скрытой/временной папке или они исчезли навсегда? На данный момент меня не беспокоит место на жестком диске, так как я исправил ошибку. Я хотел бы восстановить логи, если это возможно.

Операционная система сервера и репозитория — Windows Server 2019 (я думаю).

1 ответ

У нас есть сценарий, который должен был переместить файлы LOG с сервера в локальный репозиторий. Оказалось, что автор сценария случайно добавил апостроф в пункте назначения:

Апостроф не обязательно может быть случайностью; это escape-символ в PowerShell (например,"`n"в PS имеет аналогичное значение"\n"на других языках оба расширяются до символа новой строки).

Поскольку строки PowerShell расширяют переменные $, нормально помещать escape-символ перед$это должно оставаться буквальным знаком "$" (например,"foo`$bar"), и хотя в вашем конкретном примере расширения переменной не произойдет, обратный апостроф все равно имеет тот же результат:"`$"создайте буквальный знак доллара (это то, что вам, вероятно, нужно).

Хранит ли Windows файлы из операции MOVE где-нибудь в скрытой/временной папке?

Это не так. Однако он также не удаляет оригиналы до тех пор, пока копирование из источника в место назначения не будет успешным. Если бы сценарий действительно перемещал файлы в несуществующую общую папку, PowerShell «Move-Item» и Cmd.exe «MOVE» остановились бы после того, как не удалось создать выходной файл, ничего не удалив.

Тот факт, что на сервере медленно заканчивается дисковое пространство, также указывает на то, что сценарий успешно создал файлы в целевом каталоге, подразумевая, что целевой каталог действительно существует. (Windows не изобретает имена общих ресурсов из ниоткуда, поэтому этого бы не произошло, если бы сценарий неправильно использовал «xxx`$» в качестве имени общего ресурса, как вы предполагаете.)

Убедитесь, что путь UNC действительно представляет ожидаемую папку на стороне сервера (т. е., возможно, вы просто ищете папку A, но общий ресурс сопоставлен с папкой B). Если вы знаете имена файлов, найдите это точное имя на всех дисках сервера (например, Cmd'sdir/a/b/s c:\foo.log). Если диск заполняется, запустите SpaceSniffer или WinDirStat и посмотрите, какой каталог самый большой — там находятся ваши логи.

Другие вопросы по тегам