Skip to content

Publish-ToIpfs

Publishes files & folders to IPFS

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 <HASH>"
	exit 0 # success
} catch {
	"?? ERROR: $($Error[0]) (script line $($_.InvocationInfo.ScriptLineNumber))"
	exit 1
}

Specifies the file pattern

Specifies the path to the resulting hash list

Specifies the path to the resulting digital forensic hashes

An interactive directory of PowerShell scripts.