[研究]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
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 } } |
(完)
相關
沒有留言:
張貼留言