我使用的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值? –