Public/Jira/Projects/New-AtlassianCloudJiraProject.ps1

function New-AtlassianCloudJiraProject{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, Position=0)]
        [ValidateNotNullOrEmpty()]
        [string]$ProjectKey,
 
        [Parameter(Mandatory, Position=1)]
        [ValidateNotNullOrEmpty()]
        [string]$Name,
 
        [Parameter(Mandatory, Position=2)]
        [ValidateNotNullOrEmpty()]
        [string]$LeadAccountId,

        [Parameter(Mandatory = $false, Position=3)]
        [ValidateSet('PROJECT_LEAD','UNASSIGNED')]
        [string]$AssigneeType,
 
        [Parameter(Mandatory = $false, Position=4)]
        [int]$AvatarId,
 
        [Parameter(Mandatory = $false, Position=5)]
        [int]$CategoryId,
 
        [Parameter(Mandatory = $false, Position=6)]
        [string]$Description,
 
        [Parameter(Mandatory = $false, Position=7)]
        [int]$FieldConfigurationSchemeId,
 
        [Parameter(Mandatory = $false, Position=8)]
        [int]$IssueSecuritySchemeId,
 
        [Parameter(Mandatory = $false, Position=9)]
        [int]$IssueTypeSchemeId,
 
        [Parameter(Mandatory = $false, Position=10)]
        [int]$IssueTypeScreenSchemeId,
 
        [Parameter(Mandatory = $false, Position=11)]
        [int]$NotificationSchemeId,

        [Parameter(Mandatory = $false, Position=12)]
        [int]$PermissionSchemeId,
 
        [Parameter(Mandatory = $false, Position=13)]
        [ValidateSet('software','service_desk','business')]
        [string]$ProjectType,

        [Parameter(Mandatory = $false, Position=13)]
        [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.pyxis.greenhopper.jira:gh-cross-team-template','com.atlassian.servicedesk:simplified-it-service-management','com.atlassian.servicedesk:simplified-general-service-desk','com.atlassian.servicedesk:simplified-general-service-desk-it','com.atlassian.servicedesk:simplified-general-service-desk-business','com.atlassian.servicedesk:simplified-internal-service-desk','com.atlassian.servicedesk:simplified-external-service-desk','com.atlassian.servicedesk:simplified-hr-service-desk','com.atlassian.servicedesk:simplified-facilities-service-desk','com.atlassian.servicedesk:simplified-legal-service-desk','com.atlassian.servicedesk:simplified-marketing-service-desk','com.atlassian.servicedesk:simplified-finance-service-desk','com.atlassian.servicedesk:simplified-analytics-service-desk','com.atlassian.servicedesk:simplified-design-service-desk','com.atlassian.servicedesk:simplified-sales-service-desk','com.atlassian.servicedesk:simplified-halp-service-desk','com.atlassian.servicedesk:simplified-blank-project-it','com.atlassian.servicedesk:simplified-blank-project-business','com.atlassian.servicedesk:next-gen-it-service-desk','com.atlassian.servicedesk:next-gen-hr-service-desk','com.atlassian.servicedesk:next-gen-legal-service-desk','com.atlassian.servicedesk:next-gen-marketing-service-desk','com.atlassian.servicedesk:next-gen-facilities-service-desk','com.atlassian.servicedesk:next-gen-general-service-desk','com.atlassian.servicedesk:next-gen-general-it-service-desk','com.atlassian.servicedesk:next-gen-general-business-service-desk','com.atlassian.servicedesk:next-gen-analytics-service-desk','com.atlassian.servicedesk:next-gen-finance-service-desk','com.atlassian.servicedesk:next-gen-design-service-desk','com.atlassian.servicedesk:next-gen-sales-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-tracking')]
        [string]$ProjectTemplateKey,

        [Parameter(Mandatory = $false, Position=14)]
        [string]$Url,
 
        [Parameter(Mandatory = $false, Position=15)]
        [int]$WorkflowSchemeId,
 
        [Parameter(Mandatory, Position=17)]
        [ValidateNotNullOrEmpty()]
        [string]$AtlassianOrgName,

        [Parameter(Mandatory, Position=18)]
        [ValidateNotNullOrEmpty()]
        [string]$Pat
    )

    $data = @{
        key = $ProjectKey
        name = $Name
        leadAccountId = $LeadAccountId
    }

    if ($AssigneeType) {
        $data += @{
            assigneeType = $AssigneeType
        }
    }

    if ($AvatarId) {
        $data += @{
            avatarId = $AvatarId
        }
    }

    if ($CategoryId) {
        $data += @{
            categoryId = $CategoryId
        }
    }

    if ($Description) {
        $data += @{
            description = $Description
        }
    }

    if ($FieldConfigurationSchemeId) {
        $data += @{
            fieldConfigurationScheme = $FieldConfigurationSchemeId
        }
    }

    if ($IssueSecuritySchemeId) {
        $data += @{
            issueSecurityScheme = $IssueSecuritySchemeId
        }
    }

    if ($IssueTypeSchemeId) {
        $data += @{
            issueTypeScheme = $IssueTypeSchemeId
        }
    }

    if ($IssueTypeScreenSchemeId) {
        $data += @{
            issueTypeScreenScheme = $IssueTypeScreenSchemeId
        }
    }

    if ($NotificationSchemeId) {
        $data += @{
            notificationScheme = $NotificationSchemeId
        }
    }

    if ($PermissionSchemeId) {
        $data += @{
            permissionScheme = $PermissionSchemeId
        }
    }

    if ($ProjectTemplateKey) {
        $data += @{
            projectTemplateKey = $ProjectTemplateKey
        }

        if ($ProjectTemplateKey -like 'com.atlassian.jira-core-project-templates:*') {
            $data += @{
                projectTypeKey = 'business'
            }
        }
    
        if ($ProjectTemplateKey -like 'com.atlassian.servicedesk:*') {
            $data += @{
                projectTypeKey = 'service_desk'
            }
        }
    
        if ($ProjectTemplateKey -like 'com.pyxis.greenhopper.jira:*') {
            $data += @{
                projectTypeKey = 'software'
            }
        }
    } else {
        if ($ProjectType) {
            $data += @{
                projectTypeKey = $ProjectType
            }        }
    }

    if ($Url) {
        $data += @{
            url = $Url
        }
    }

    if ($WorkflowSchemeId) {
        $data += @{
            workflowScheme = $WorkflowSchemeId
        }
    }

    Write-Host ($data | ConvertTo-Json)
    return Invoke-AtlassianCloudJiraMethod -Data $data -Method Post -AtlassianOrgName $AtlassianOrgName -Endpoint 'project' -Pat $Pat -Verbose:($Verbose.IsPresent)
}