public/api-v2/project/Invoke-JiraCreateProject.ps1

#https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-project-post
function Invoke-JiraCreateProject {
    [CmdletBinding()]
    param (
        # The key for the project
        [Parameter(Mandatory,Position=0)]
        [string]
        $Key,

        # The name for the project
        [Parameter(Mandatory,Position=1)]
        [string]
        $Name,

        # The type of the project
        [Parameter(Mandatory,Position=2)]
        [ValidateSet("ops", "software", "service_desk", "business")]
        [string]
        $Type,

        # The template to use to create the project
        [Parameter(Mandatory,Position=3)]
        [ValidateSet("com.pyxis.greenhopper.jira:gh-simplified-agility-kanban",
                     "com.pyxis.greenhopper.jira:gh-simplified-agility-scrum",
                     "com.pyxis.greenhopper.jira:gh-simplified-basic",
                     "com.pyxis.greenhopper.jira:gh-simplified-kanban-classic",
                     "com.pyxis.greenhopper.jira:gh-simplified-scrum-classic",
                     "com.atlassian.servicedesk:simplified-it-service-desk",
                     "com.atlassian.servicedesk:simplified-internal-service-desk",
                     "com.atlassian.servicedesk:simplified-external-service-desk",
                     "com.atlassian.jira-core-project-templates:jira-core-simplified-content-management",
                     "com.atlassian.jira-core-project-templates:jira-core-simplified-document-approval",
                     "com.atlassian.jira-core-project-templates:jira-core-simplified-lead-tracking",
                     "com.atlassian.jira-core-project-templates:jira-core-simplified-process-control",
                     "com.atlassian.jira-core-project-templates:jira-core-simplified-procurement",
                     "com.atlassian.jira-core-project-templates:jira-core-simplified-project-management",
                     "com.atlassian.jira-core-project-templates:jira-core-simplified-recruitment",
                     "com.atlassian.jira-core-project-templates:jira-core-simplified-task-",
                     "com.atlassian.jira.jira-incident-management-plugin:im-incident-management"
                     )]
        [string]
        $Template,

        # The account ID of the project lead
        [Parameter(Mandatory,Position=4)]
        [string]
        $ProjectLead,

        # A description for the project
        [Parameter(Position=5)]
        [string]
        $Description,

        # A URL for the project website
        [Parameter(Position=6)]
        [string]
        $Url,

        # The ID of the avatar to set for the project
        [Parameter(Position=7)]
        [int64]
        $AvatarId,

        # The ID of the Issue Security Scheme to set for the project
        [Parameter(Position=8)]
        [int64]
        $IssueSecurityScheme,

        # The ID of the Permission Scheme to set for the project
        [Parameter(Position=9)]
        [int64]
        $PermissionScheme,

        # The ID of the Notification Scheme to set for the project
        [Parameter(Position=10)]
        [int64]
        $NotificationScheme,

        # The ID of the category to set for the project
        [Parameter(Position=11)]
        [int64]
        $CategoryId,

        # Set this flag to configure the project to assign issues to the project lead by default
        [Parameter()]
        [switch]
        $AssignProjectLead,

        # The JiraContext object to use for the request
        [Parameter()]
        [JiraContext]
        $JiraContext
    )
    process {
        $functionPath = "/rest/api/2/project"
        $verb = "POST"

        $body = New-Object RestMethodJsonBody @{
            key = $Key
            name = $Name
            projectTypeKey = $Type
            projectTemplateKey = $Template
            leadAccountId = $ProjectLead
            assigneeType = if($AssignProjectLead) {"PROJECT_LEAD"} else {"UNASSIGNED"}
        }
        if($PSBoundParameters.ContainsKey("Description")){$body.Add("description",$Description)}
        if($PSBoundParameters.ContainsKey("Url")){$body.Add("url",$Url)}
        if($PSBoundParameters.ContainsKey("AvatarId")){$body.Add("avatarId",$AvatarId)}
        if($PSBoundParameters.ContainsKey("IssueSecurityScheme")){$body.Add("issueSecurityScheme",$IssueSecurityScheme)}
        if($PSBoundParameters.ContainsKey("PermissionScheme")){$body.Add("permissionScheme",$PermissionScheme)}
        if($PSBoundParameters.ContainsKey("NotificationScheme")){$body.Add("notificationScheme",$NotificationScheme)}
        if($PSBoundParameters.ContainsKey("CategoryId")){$body.Add("categoryId",$CategoryId)}

        $method = New-Object BodyRestMethod @($functionPath,$verb,$body)
        $method.Invoke($JiraContext)
    }
}