Windows PowerShell:Get-FileHash 和长文件路径

Windows PowerShell:Get-FileHash 和长文件路径

操作系统是Windows 10。

我使用 PowerShell 的“Get-FileHash”命令直接在文件文件夹中生成文件的 MD5 校验和,如下所示:

PS Z:\Test> Get-FileHash 'test.txt' -algorithm MD5                                                                      
Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
MD5             D41D8CD98F00B204E9800998ECF8427E                                       Z:\Test\test.txt

但是,当涉及长文件路径时,PowerShell 似乎无法通过 Get-FileHash 找到该文件。

PS Z:\Test loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong> Get-FileHash 'looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong.txt' -algorithm MD5                                                                                                                Resolve-Path : Cannot find path 'Z:\Test looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooong\looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooong.txt' because it does not exist.
At C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Utility\Microsoft.PowerShell.Utility.psm1:11
0 char:36
+                 $pathsToProcess += Resolve-Path $Path | Foreach-Objec ...
+                                    ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Z:\Test loooooo...ooooooooong.txt:String) [Resolve-Path], ItemNotFoundE
   xception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.ResolvePathCommand

另一方面,它完全能够使用“Get-ChildItem”找到该文件:

PS Z:\Test loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong> Get-ChildItem


    Directory: Z:\Test looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
    ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
    oooooooooooooooooooooooooong


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2024-02-26     12:55              0 loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
                                                  ooooooooooong.txt

在这种情况下,我该如何生成 MD5:s?我没有管理权限。

答案1

\\?\您可以通过在路径前面添加参数来指定扩展长度的路径-LiteralPath,例如:

# local path
Get-FileHash -LiteralPath '\\?\C:\long\path\to\file.txt'

# network share
Get-FileHash -LiteralPath '\\?\UNC\server\share\folder\file.txt'

这使得大多数程序能够接受长路径名,并且不需要管理员权限。

请参阅此处的答案中的更多信息:https://stackoverflow.com/a/21194605/7411885

相关内容