Script: *publish-to-ipfs.ps1* ======================== This script publishes the given files and folders to IPFS. Parameters ---------- ```powershell PS> ./publish-to-ipfs.ps1 [[-FilePattern] ] [[-HashList] ] [[-DF_Hashes] ] [] -FilePattern Specifies the file pattern Required? false Position? 1 Default value Accept pipeline input? false Accept wildcard characters? false -HashList Specifies the path to the resulting hash list Required? false Position? 2 Default value IPFS_hashes.txt Accept pipeline input? false Accept wildcard characters? false -DF_Hashes Specifies the path to the resulting digital forensic hashes Required? false Position? 3 Default value file_checksums.xml Accept pipeline input? false Accept wildcard characters? false [] This script supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. ``` Example ------- ```powershell PS> ./publish-to-ipfs C:\MyFile.txt ``` Notes ----- Author: Markus Fleschutz | License: CC0 Related Links ------------- https://github.com/fleschutz/PowerShell Script Content -------------- ```powershell <# .SYNOPSIS Publishes files & folders to IPFS .DESCRIPTION This script publishes the given files and folders to IPFS. .PARAMETER FilePattern Specifies the file pattern .PARAMETER HashList Specifies the path to the resulting hash list .PARAMETER DF_Hashes Specifies the path to the resulting digital forensic hashes .EXAMPLE PS> ./publish-to-ipfs C:\MyFile.txt .LINK https://github.com/fleschutz/PowerShell .NOTES Author: Markus Fleschutz | License: CC0 #> param([string]$FilePattern = "", [string]$HashList = "IPFS_hashes.txt", [string]$DF_Hashes = "file_checksums.xml") try { if ($FilePattern -eq "") { $FilePattern = read-host "Enter file(s)/directories to publish" } $StopWatch = [system.diagnostics.stopwatch]::startNew() Write-Host "⏳ (1/3) Searching for IPFS executable..." -NoNewline & ipfs --version if ($lastExitCode -ne "0") { throw "Can't execute 'ipfs' - make sure IPFS is installed and available" } if (test-path "$FilePattern" -pathType container) { "⏳ (2/3) Publishing folder $FilePattern/..." & ipfs add -r "$FilePattern" > $HashList [int]$Count = 1 "" "⏳ (3/3) Calculating digital forensics hashes to $DF_HASHES ..." & nice hashdeep -c md5,sha1,sha256 -r -d -l -j 1 "$FilePattern" > $DF_Hashes } else { $FileList = (get-childItem "$FilePattern") foreach ($File in $FileList) { if (test-path "$FilePattern" -pathType container) { "⏳ (2/3) Publishing folder $File/..." & ipfs add -r "$File" >> $HashList } else { "⏳ (3/3) Publishing file $File..." & ipfs add "$File" >> $HashList } } [int]$Count = $FileList.Count } [int]$Elapsed = $StopWatch.Elapsed.TotalSeconds "✔️ published $Count file(s)/folder(s) to IPFS in $Elapsed sec" " NOTE: to publish it to IPNS execute: ipfs name publish " exit 0 # success } catch { "⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])" exit 1 } ``` *(generated by convert-ps2md.ps1 using the comment-based help of publish-to-ipfs.ps1 as of 05/19/2024 10:25:25)*