Functions/Public/New-GitHubRepository.ps1

function New-GitHubRepository {
    <#
    .Synopsis
    Creates a new GitHub Repository, with the specified name.

    .Parameter Name
    The name of the new GitHub repository that will be created. This is the only required parameter in order to instantiate a new GitHub Repository. The other parameters are optional, but recommended.

    .Parameter Description
    A user-friendly "plain English" description to help people understand the purpose of the GitHub repository.

    .Parameter Homepage
    The home page for the product or service that the project belongs to (eg. https://mycoolsoftwareproject.com).

    .Parameter IncludeReadme
    Indicates that a stub README.MD Markdown file should be generated when the repository is created.

    .Parameter DisableIssues
    If this parameter is present, then the GitHub Issue Tracker will be disable for the new GitHub Repository.

    .Parameter Private
    If this switch parameter is present, then the repository will be created as a Private (non-public) repository. This requires a subscription to GitHub. Free accounts are eligible for public repositories only.

    .Notes
    Created by Trevor Sullivan <trevor@trevorsullivan.net>
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string] $Name,
        [Parameter(Mandatory = $false)]
        [string] $Description,
        [Parameter(Mandatory = $false)]
        [string] $Homepage,
        [Parameter(Mandatory = $false)]
        [switch] $IncludeReadme,
        [Parameter(Mandatory = $false)]
        [string] $DisableIssues,
        [Parameter(Mandatory = $false)]
        [string] $Private,
        [Security.SecureString] $Token = (Get-GitHubToken)
    )

    $Body = @{
        name        = $Name;
        description = $Description;
        homepage    = $Homepage;
        private     = [bool]$Private;
        has_issues  = [bool]!$DisableIssues;
        auto_init   = [bool]$IncludeReadme;
    } | ConvertTo-Json;
    Write-Verbose -Message $Body;

    Invoke-GitHubApi -Uri user/repos -Body $Body -Method Post -Token $Token;

}