Functions/Public/Save-GitHubGist.ps1

Function Save-GitHubGist {
    <#
    .Synopsis
    This command saves all files from a gist.

    .Description
    This command is responsible for saving each file that is associated with a gist to the local machine.

    .Parameter Path
    Path to create a parent folder named the 'ID' of the Gist, then places all Gist Content files that that directory.

    .Parameter Gist
    The Gist object to be saved. Returned from Get-GitHubGist.

    .Example
    Get-GitHubGist -Id 62f8f608bdfec5d08552 | Save-GitHubGist


        Directory: C:\Users\me\Documents\GitHub\Gists\62f8f608bdfec5d08552


    Mode LastWriteTime Length Name
    ---- ------------- ------ ----
    -a---- 3/21/2016 3:11 PM 2080 Register-SophosWebIntelligenceService.ps1

    .Notes
    This cmdlet will compliment Get-GitHubGist nicely.

    .Link
    https://trevorsullivan.net
    http://dotps1.github.io
    https://developer.github.com/v3/gists/
    #>


    [CmdletBinding()]
    [OutputType()]
    Param (
        [Parameter()]
        [String]$Path = "$env:APPDATA\PSGitHub\Gists",
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [System.Object[]]$Gist
    )

    Process {
        foreach ($item in $Gist) {
            $directory = New-Item -Path $Path -Name $item.Id -ItemType Directory -Force
            foreach ($file in ($item.files.PSObject.Properties.Value)) {
                New-Item -Path $directory -Name $file.filename -ItemType File -Value $file.content
            }
        }
    }
}