Get-FileHash на всем диске C:

Я пишу сценарий для сбора всех хэшей файлов на диске C:, но не все. У кого-нибудь есть идеи? Я пробовал разные вещи.

gci -Path C:\ -Recurse | Get-FileHash -Algorithm MD5 | Out-File C:\test.txt

1 ответ

Решение
  • Поскольку вы вычисляете хэши файлов, сделайтеGet-ChildItem возвращать только файлы, используя -File переключатель.

  • Чтобы также обрабатывать скрытые файлы, дополнительно используйте-Force переключатель.

  • Вы должны запустить команду с повышением прав (от имени администратора), чтобы убедиться, что у вас есть доступ ко всем файлам, хотя по-прежнему возможно запретить доступ к определенным каталогам и файлам.

    • По умолчанию это происходит со скрытыми, определенными системой перекрестками, например, в корне пользовательских профилей (например, C:\Users\jdoe\Cookies), которые существуют только для обратной совместимости; однако вы можете игнорировать их, потому что они просто указывают на другие каталоги, к которым можно получить доступ.
    • Обратите внимание, что Get-ChildItemВ этом случае также игнорировать бы любые NTFS точек повторной обработки, которые указывают на другие диски или каталогов (узлов, символических ссылок, точек монтирования), даже если они являются доступными - что, вероятно, что вы хотите.
    • Используя -ea SilentlyContinue -ev errs (Короче для: -ErrorAction SilentlyContinue -ErrorVariable errs) вы можете изучить массив $errs потом, чтобы увидеть, к каким именно файлам нельзя было получить доступ.
# Examine $errs afterwards to see which paths couldn't be accessed.
Get-ChildItem C:\ -Recurse -File -Force -ea SilentlyContinue -ev errs | 
  Get-FileHash -Algorithm MD5 | 
    Out-File C:\test.txt

Обратите внимание Out-File командлет сохраняет отображаемое представление вывода команды в файл, который не предназначен для дальнейшей программной обработки.
Чтобы сохранить представление, которое подходит для последующей программной обработки, использует командлет, такие как Export-Csv.

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