2014-12-01 139 views

回答

19

我不记得在Powershell V2的日子里,通常也安装了.NET 3.5。我认为是这样。

你总是可以尝试以下,看看它的工作原理:

$file = 'd:\scripts\sha1.ps1' 

$sha1 = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider 
[System.BitConverter]::ToString($sha1.ComputeHash([System.IO.File]::ReadAllBytes($file))) 

与你有一个文件的名称替换的$file值。

+0

是的工作,太棒了!谢谢。 – user3586898 2014-12-03 11:13:51

+0

只需要注意一些人在IOS这样的大文件上尝试这样的操作:'调用带有“1”参数的异常调用“ReadAllBytes”:“文件太长,此操作目前仅限于支持小于2GB大小的文件“' – 2016-05-26 10:54:50

+1

使用['File.OpenRead']可能更好(https://msdn.microsoft.com/en-us/library/system.io.file.openread(v = vs.110).aspx)而不是试图一次将整个文件加载到内存中。 ['HashAlgorithm.ComputeHash'](https://msdn.microsoft.com/en-us/library/xa627k19(v = vs.110).aspx)对'Stream'有重载。 – jpmc26 2017-04-12 21:19:45

1

是的,它可能是因为它是NET 2.0的一部分。实际上,PowerShell Community Extensions使用.NET哈希支持来实现Get-Hash命令。版本2.1.1在PowerShell V2上安装并运行。

+0

干杯!有用的知道,但不幸的是,我无法以任何形式或形式升级PowerShell。 – user3586898 2014-12-03 11:13:35