我使用的PowerShell 4.0,我正好遇到空输出同样的问题,从GET-FileHash。我的问题的原因是不同于OP,但我找到了解决我的问题,我想我会发布我的发现,谁来到这个页面试图解决空输出(或看似不正确的输出)从Get -FileHash。
只有当目标文件的路径包含方括号[]时,问题才会发生(对于我),并且这些方括号包含零个字符或2个或更多个字符。
编辑:我现在明白为什么会发生这种情况。该字符串被解释为正则表达式(RegEx),所以方括号[]具有其特殊的RegEx含义。 -LiteralPath通知PowerShell将该字符串解释为简单匹配(无RegEx)。
考虑其指4个现有文本文件(假设)以下路径:
C:\Test\My Text.txt
C:\Test\My [Text].txt
C:\Test\My [Te]xt.txt
C:\Test\My Text[].txt
以下命令产生正常输出:
Get-FileHash "C:\Test\My Text.txt"
但会有零输出,如果使用以下命令:
Get-FileHash "C:\Test\My [Text].txt"
Get-FileHash "C:\Test\My [Te]xt.txt"
Get-FileHash "C:\Test\My Text[].txt"
这可以通过使用 - LiteralPath开关。例如:
Get-FileHash -LiteralPath "C:\Test\My [Text].txt"
当使用-LiteralPath开关时,变量正常扩展。例如:
(Get-ChildItem C:\Test).FullName | ForEach {
Get-FileHash -LiteralPath $_
}
如果方括号之间只有一个字符,则在使用Get-FileHash时,方括号将被忽略。
考虑下面的路径,其是指3个现有的文本文件(假设),每个都有唯一的哈希值:
C:\Test\My Text.txt
C:\Test\My Tex[t].txt
C:\Test\My[ ]Text.txt
GET-FileHash解释所有三个完全相同的方式下列命令(路径被解释为C:\测试\我TEXT.TXT),因此每个命令具有尽管每个文件有它自己独特的散列值完全相同的输出:
Get-FileHash "C:\Test\My Text.txt"
Get-FileHash "C:\Test\My Tex[t].txt"
Get-FileHash "C:\Test\My[ ]Text.txt"
PS我是一个非常新的程序员,请原谅我对术语的不当使用。
尝试:Get-FileHash。\ myfile.txt -Algorithm SHA256并失败:$ hash = Get-FileHash。\ myfile.txt - 算法SHA256。 –
关于第一个建议,我试过了,但是我提供的论点并不重要。第二,操作系统接受语法,但是当我输出$ hash时,那里什么也没有。 –
什么是您的$ PSVersionTable.PSVersion值? –