[研究]PowerShell 替目錄及子目錄所有檔案產生 .SHA256 檔案
2024-11-20
對本機電腦
$directory = "C:\YourDirectory"
$files = Get-ChildItem -Path $directory -Recurse -File
foreach ($file in $files) {
$hash = Get-FileHash -Path $file.FullName -Algorithm SHA256
$outputFile = $file.FullName + ".SHA256"
$hash.Hash | Out-File -FilePath $outputFile -Encoding UTF8
}
|
對網路芳鄰其他電腦 (敝人環境好像要先切換到 C: 才正常)
C: $directory = "\\ComputerName\SharedFolder"
$files = Get-ChildItem -Path $directory -Recurse -File
foreach ($file in $files) {
$hash = Get-FileHash -Path $file.FullName -Algorithm SHA256
$outputFile = $file.FullName + ".SHA256"
$hash.Hash | Out-File -FilePath $outputFile -Encoding UTF8
}
|
********************************************************************************
對本機電腦,排除已經存在的 .SHA256
$directory = "C:\YourDirectory" # 指定要處理的目錄 $files = Get-ChildItem -Path $directory -Recurse -File | Where-Object { $_.Extension -ne ".SHA256" } foreach ($file in $files) { $hash = Get-FileHash -Path $file.FullName -Algorithm SHA256 $outputFile = $file.FullName + ".SHA256" $hash.Hash | Out-File -FilePath $outputFile -Encoding UTF8 } |
********************************************************************************
對本機電腦,排除已經存在的 .SHA256,處理多個目錄
C: # 定義多個本機目錄 or 網路共享的目錄 (使用 UNC 路徑) $directories = @( "C:\Directory1", "C:\Directory2", "C:\Directory3" "\\Computer1\SharedFolder1", "\\Computer2\SharedFolder2", "\\Computer3\SharedFolder3" ) foreach ($directory in $directories) { Write-Host "Processing directory: $directory" -ForegroundColor Green try { # 獲取目錄中的所有檔案,排除副檔名為 .SHA256 的檔案 $files = Get-ChildItem -Path $directory -Recurse -File | Where-Object { $_.Extension -ne ".SHA256" } foreach ($file in $files) { # 計算檔案的 SHA256 $hash = Get-FileHash -Path $file.FullName -Algorithm SHA256 # 生成 .SHA256 檔案的完整路徑 $outputFile = $file.FullName + ".SHA256" # 將哈希值寫入 .SHA256 檔案 $hash.Hash | Out-File -FilePath $outputFile -Encoding UTF8 } } catch { Write-Host "Failed to process directory: $directory. Error: $($_.Exception.Message)" -ForegroundColor Red } } |
********************************************************************************
對本機電腦,排除已經存在的 .SHA256,處理多個目錄;失敗時輸出訊息,但仍要繼續對其它檔案進行 SHA256
C: # 定義多個網路共享的目錄 (使用 UNC 路徑) $directories = @( "C:\Directory1", "C:\Directory2", "C:\Directory3", "\\Computer1\SharedFolder1", "\\Computer2\SharedFolder2", "\\Computer3\SharedFolder3" ) # 記錄日誌的檔案路徑 $logFile = "C:\SHA256_ErrorLog.txt" # 清空日誌檔案 Clear-Content -Path $logFile -ErrorAction SilentlyContinue foreach ($directory in $directories) { Write-Host "Processing directory: $directory" -ForegroundColor Green try { # 獲取目錄中的所有檔案,排除副檔名為 .SHA256 的檔案 $files = Get-ChildItem -Path $directory -Recurse -File | Where-Object { $_.Extension -ne ".SHA256" } foreach ($file in $files) { try { # 計算檔案的 SHA256 $hash = Get-FileHash -Path $file.FullName -Algorithm SHA256 # 生成 .SHA256 檔案的完整路徑 $outputFile = $file.FullName + ".SHA256" # 將哈希值寫入 .SHA256 檔案 $hash.Hash | Out-File -FilePath $outputFile -Encoding UTF8 } catch { # 如果某檔案處理失敗,記錄錯誤訊息 $errorMessage = "Failed to process file: $($file.FullName). Error: $($_.Exception.Message)" Write-Host $errorMessage -ForegroundColor Red Add-Content -Path $logFile -Value $errorMessage } } } catch { # 如果整個目錄無法訪問,記錄錯誤訊息 $errorMessage = "Failed to process directory: $directory. Error: $($_.Exception.Message)" Write-Host $errorMessage -ForegroundColor Red Add-Content -Path $logFile -Value $errorMessage } } |
********************************************************************************
對本機電腦,排除已經存在的 .SHA256,處理多個目錄;失敗時輸出訊息,但仍要繼續對其它檔案進行 SHA256;如果某檔案 AAA 已經存在 AAA.SHA256,不要再對 AAA 作 SHA256
檔案內容可用"記事本"編輯,儲存成 ANSI格式,不要 UTF8格式
CalcSHA256_ANSI.ps1
C: # 定義多個網路共享的目錄 (使用 UNC 路徑) $directories = @( "\\Computer1\SharedFolder1", "\\Computer2\SharedFolder2", "\\Computer3\SharedFolder3" ) # 記錄日誌的檔案路徑 $logFile = "C:\Temp\SHA256_ErrorLog.txt" # 確保 Temp 目錄存在 if (-not (Test-Path -Path "C:\Temp")) { New-Item -ItemType Directory -Path "C:\Temp" | Out-Null } # 清空日誌檔案 Clear-Content -Path $logFile -ErrorAction SilentlyContinue foreach ($directory in $directories) { Write-Host "Processing directory: $directory" -ForegroundColor Green try { # 獲取目錄中的所有檔案,排除副檔名為 .SHA256 的檔案 $files = Get-ChildItem -Path $directory -Recurse -File | Where-Object { $_.Extension -ne ".SHA256" } foreach ($file in $files) { try { # 檢查是否存在對應的 .SHA256 檔案 $outputFile = $file.FullName + ".SHA256" if (Test-Path $outputFile) { Write-Host "Skipping file: $($file.FullName) (SHA256 file already exists)" -ForegroundColor Yellow continue } # 計算檔案的 SHA256 $hash = Get-FileHash -Path $file.FullName -Algorithm SHA256 # 將哈希值寫入 .SHA256 檔案 $hash.Hash | Out-File -FilePath $outputFile -Encoding UTF8 Write-Host "Generated SHA256 for file: $($file.FullName)" -ForegroundColor Green } catch { # 如果某檔案處理失敗,記錄錯誤訊息 $errorMessage = "Failed to process file: $($file.FullName). Error: $($_.Exception.Message)" Write-Host $errorMessage -ForegroundColor Red Add-Content -Path $logFile -Value $errorMessage } } } catch { # 如果整個目錄無法訪問,記錄錯誤訊息 $errorMessage = "Failed to process directory: $directory. Error: $($_.Exception.Message)" Write-Host $errorMessage -ForegroundColor Red Add-Content -Path $logFile -Value $errorMessage } } |
執行 PowerShell 的 .ps1 方法,先啟動 PowerShell,相對路徑執行方法
.\CalcSHA256_ANSI.ps1 |
絕對路徑執行方法
C:\Users\YourName\Documents\Scripts\CalcSHA256_ANSI.ps1 |
如果執行失敗,可用 Get-ExecutionPolicy 指令檢查權限,如果權限不足,可用 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass 暫時放寬
.PS D:\MySystems> .\CalcSHA256_ANSI.ps1 .\CalcSHA256.ps1 : 因為這個系統上已停用指令碼執行,所以無法載入 D:\MySystems\CalcSHA256.ps1 檔案。如需詳細資訊,請參閱 a bout_Execution_Policies,網址為 https:/go.microsoft.com/fwlink/?LinkID=135170。 位於 線路:1 字元:1 + .\CalcSHA256.ps1 + ~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess PS D:\MySystems> Get-ExecutionPolicy Restricted PS D:\MySystems> Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass PS D:\MySystems> Get-ExecutionPolicy Bypass PS D:\MySystems> |
絕對路徑執行方法
(完)
相關
沒有留言:
張貼留言