Есть ли способ напечатать как строку файла, файл ha sh, так и дату последнего изменения? - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь выяснить, как напечатать список путей к файлам в папке вместе с сопровождающей их контрольной суммой и датой последнего изменения.

Я могу получить список путей к файлам и контрольных сумм:

Get-ChildItem -Recurse | Get-FileHash | Export-Csv -Path C:\Temp\ListOfHashes.csv

Я также могу получить список путей к файлам, контрольных сумм и даты последнего изменения:

Get-ChildItem -File -Recurse |
Select DirectoryName,Name,@{N='Version';E={$_.VersionInfo.ProductVersion}},LastWriteTime,Length,@{N='FileHash';E={(Get-FileHash $_).Hash}} | Export-Csv -Path c:\temp\test11.csv

Но странная вещь заключается в том, что первый скрипт (который просто печатает ha sh) имеет ha sh для каждого файла. Второй скрипт печатает путь к файлу, дату последнего изменения и ha sh, но не всегда включает ha sh. Кто-нибудь знает почему?

enter image description here

Я понял, в чем проблема: он не может написать ha sh, если файл открыт. Этот скрипт, как и приведенные ниже, все работает.

Редактировать: Филипп четыре ie добавление имеет решающее значение:

Get-ChildItem -File -Recurse |
Select DirectoryName,Name,@{N='Version';E={$_.VersionInfo.ProductVersion}},LastWriteTime,Length,@{N='FileHash'; E={(Get-FileHash -LiteralPath $_.FullName).Hash}} | Export-Csv -Path c:\temp \test789.csv`

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Это то, что вы ищете?

Clear-Host
Get-ChildItem -Path 'D:\temp' -File | 
Select-Object -Property * -First 3 | 
ForEach{
    [PSCustomObject]@{
        'BaseName'                    = $PSItem.BaseName
        'FullName'                    = $PSItem.FullName
        'Length'                      = $PSItem.Length
        'LastWriteTime'               = $PSItem.LastWriteTime
        'HashCode Based on Name'      = $PSItem.GetHashCode()
        'HashCode Based on FullName'  = $PSItem.FullName.GetHashCode()
        'File Hash Only'              = (Get-FileHash -Path $PSItem.FullName).Hash
        'File Hash'                   = Get-FileHash -Path $PSItem.FullName
    }
} 

<#
# Results

BaseName                   : 23694d1213305764-revision-number-in-excel-book1
FullName                   : D:\temp\23694d1213305764-revision-number-in-excel-book1.xls
Length                     : 28817
LastWriteTime              : 06-Feb-20 14:02:47
HashCode Based on Name     : 62001128
HashCode Based on FullName : -1676880214
File Hash Only             : A3CB4415D3FAAAB38A6F7A8D959F9BE08C2E06B9A21DFC8DFEA7F0387D6F231A
File Hash                  : @{Algorithm=SHA256; Hash=A3CB4415D3FAAAB38A6F7A8D959F9BE08C2E06B9A21DFC8DFEA7F0387D6F231A; 
                             Path=D:\temp\23694d1213305764-revision-number-in-excel-book1.xls}

BaseName                   : 5 Free Software You'll Wish You Knew Earlier! 2019 - YouTube
FullName                   : D:\temp\5 Free Software You'll Wish You Knew Earlier! 2019 - YouTube.url
Length                     : 69
LastWriteTime              : 29-Dec-19 21:50:56
HashCode Based on Name     : 62001128
HashCode Based on FullName : -1214175701
File Hash Only             : 3427AD8DC44986F90F22FCCAEB108E32214A01F4917BC4F7AA159E547169BB2F
File Hash                  : @{Algorithm=SHA256; Hash=3427AD8DC44986F90F22FCCAEB108E32214A01F4917BC4F7AA159E547169BB2F; Path=D:\temp\5 Free Software You'll Wish You Knew Earlier! 
                             2019 - YouTube.url}

BaseName                   : abc
FullName                   : D:\temp\abc.txt
Length                     : 70
LastWriteTime              : 05-Mar-20 16:05:56
HashCode Based on Name     : 62001128
HashCode Based on FullName : -808200336
File Hash Only             : 63231FC845361CF6AD167D63782778DDB0528F39A188893AE6E2D8CA1F3362A6
File Hash                  : @{Algorithm=SHA256; Hash=63231FC845361CF6AD167D63782778DDB0528F39A188893AE6E2D8CA1F3362A6; Path=D:\temp\abc.txt}
#>
1 голос
/ 06 марта 2020

Заменить Get-FileHash $_ на Get-FileHash -LiteralPath $_.FullName

$_ содержит только имя файла, для Get-FileHash для работы с рекурсивными дочерними элементами необходимо указать полный путь и имя файла.

-LiteralPath может вторая часть к решению. [Te] в ваших файлах может интерпретироваться как регулярное выражение. Более подробная информация здесь: Невозможно получить вывод из get-fileha sh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...