我试图通过WMI使用Win32_FileSpecification类获取远程文件的校验和,但遇到了一些问题。
gwmi WIN32_FileSpecification
时,所有文件的输出中都有一个空的MD5Checksum值。 MD5Checksum应得到一个实例时由Windows填充,如果不是有一种方法来调用填充它? 看来WIN32_FileSpecification中的唯一方法是未实现的Invoke。 我唯一的解决scheme是使用远程编写PowerShell的cmdlet来运行脚本并生成校验和值。 这可以工作,但不是最干净的,因为在PowerShell中没有直接计算MD5的方法,所以需要额外维护代码。
谢谢!
在PowerShell中没有直接的方法来计算MD5
这并不完全正确。 请记住,PowerShell可以访问整个.NET堆栈,并且可以在.NET中计算MD5哈希值。
如果您的目标是获得MD5散列,那么您可以一起避免使用WMI,并使用如下所示:
$crypto = [System.Security.Cryptography.MD5]::Create() $data = [System.IO.File]::ReadAllBytes("\\path\to\file") $md5 = [System.Convert]::ToBase64String($crypto.ComputeHash($data))
其中md5
是MD5散列的base64编码值。
或者,如果您需要hex表示而不是散列的base64:
$md5 = [System.BitConverter]::ToString($crypto.ComputeHash($data)).Replace("-", "")
你当然可以把它包装在一个漂亮的小PowerShell函数中:
Function MD5Hash { param ($file) $crypto = [System.Security.Cryptography.MD5]::Create() $data = [System.IO.File]::ReadAllBytes($file) [System.BitConverter]::ToString($crypto.ComputeHash($data)).Replace("-", "") }
并像这样调用:
MD5Hash "\\path\to\file"