Script: *publish-to-ipfs.ps1*
========================

This script publishes the given files and folders to IPFS.

Parameters
----------
```powershell
PS> ./publish-to-ipfs.ps1 [[-FilePattern] <String>] [[-HashList] <String>] [[-DF_Hashes] <String>] [<CommonParameters>]

-FilePattern <String>
    Specifies the file pattern
    
    Required?                    false
    Position?                    1
    Default value                
    Accept pipeline input?       false
    Accept wildcard characters?  false

-HashList <String>
    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 <String>
    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

[<CommonParameters>]
    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 <HASH>"
	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 08/15/2024 09:50:53)*
