PowerShell - [решено] Как вычислить crc32 сумму файла?

Ответить
Аватара пользователя
molotova

PowerShell - [решено] Как вычислить crc32 сумму файла?

Сообщение molotova »

Добрый день!

Сразу оговорюсь, что использую PowerShell 4. Читала справку, в ней написано, что Get-FileHash вычисляет только MD5/SHA[1,256,384,512]/RIPEMD160 и MACTripleDES. Я конечно знаю, что crc32 это не то чтобы хэш, но какбы хотелось его тоже вычислять. Подскажите как это сделать?
Аватара пользователя
molotova

Re: PowerShell - [решено] Как вычислить crc32 сумму файла?

Сообщение molotova »

Код:

Код: Выделить всё

param(
  [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
  [ValidateScript({Test-Path $_})]
  [String]$FileName
)
(Add-Type -Mem @'
  [DllImport("ntdll.dll")]
  internal static extern UInt32 RtlComputeCrc32(
      UInt32 InitialCrc,
      Byte[] Buffer,
      Int32  Length
  );
  public static String ComputeCrc32(String file) {
    UInt32 crc32 = 0;
    Int32  read;
    Byte[] buf = new Byte[4096];
    FileStream fs = null;
    try {
      fs = File.OpenRead(file);
      while((read = fs.Read(buf, 0, buf.Length)) != 0)
        crc32 = RtlComputeCrc32(crc32, buf, read);
    }
    catch (Exception e) {
      Console.WriteLine(e.Message);
    }
    finally {
      if (fs != null) fs.Close();
    }
    return (crc32 != 0 ? "0x" + crc32.ToString("X", CultureInfo.CurrentCulture) : "n/a");
  }
'@ -Name RtlCrc32 -NameSpace Crc32 -Using System.IO,
System.Globalization -PassThru)::ComputeCrc32((Convert-Path $FileName))
Ответить

Вернуться в «Скриптовые языки администрирования Windows»